<?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>166003</bug_id>
          
          <creation_ts>2016-12-17 18:10:50 -0800</creation_ts>
          <short_desc>Web Inspector: teach the protocol generator about platform-specific types, events, and commands</short_desc>
          <delta_ts>2017-04-21 08:18:05 -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>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Blaze Burg">bburg</reporter>
          <assigned_to name="Blaze Burg">bburg</assigned_to>
          <cc>bburg</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>glenn</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1260977</commentid>
    <comment_count>0</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-12-17 18:10:50 -0800</bug_when>
    <thetext>This is for protocols where the Frontend can load different definitions, but the backend has a fixed protocol.A backend can include or exclude some items if its platform does not support them. For example, there are some APIs that work only on iOS or only on Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260978</commentid>
    <comment_count>1</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-12-17 18:10:57 -0800</bug_when>
    <thetext>&lt;rdar://problem/28718990&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262212</commentid>
    <comment_count>2</comment_count>
      <attachid>297636</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-12-21 17:19:06 -0800</bug_when>
    <thetext>Created attachment 297636
[PATCH 1/3] Add --platform argument</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262214</commentid>
    <comment_count>3</comment_count>
      <attachid>297637</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-12-21 17:20:26 -0800</bug_when>
    <thetext>Created attachment 297637
[PATCH 2/3] Move test cases into platform-specific directories</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262215</commentid>
    <comment_count>4</comment_count>
      <attachid>297638</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-12-21 17:21:20 -0800</bug_when>
    <thetext>Created attachment 297638
[PATCH 3/3] Parser/model/generator changes, and tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262217</commentid>
    <comment_count>5</comment_count>
      <attachid>297639</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-12-21 17:22:44 -0800</bug_when>
    <thetext>Created attachment 297639
[COMBINED PATCH] For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262220</commentid>
    <comment_count>6</comment_count>
      <attachid>297640</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-12-21 17:24:53 -0800</bug_when>
    <thetext>Created attachment 297640
[PATCH 2/3 v2] Move test cases into platform-specific directories</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262225</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-21 17:27:26 -0800</bug_when>
    <thetext>This patch modifies the inspector protocol generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-inspector-generator-tests --reset-results`)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262226</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-21 17:27:42 -0800</bug_when>
    <thetext>Attachment 297639 did not pass style-queue:

ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py:48:  [ObjCFrontendDispatcherImplementationGenerator.domains_to_generate] Instance of &apos;ObjCFrontendDispatcherImplementationGenerator&apos; has no &apos;should_generate_events_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py:70:  [ObjCFrontendDispatcherImplementationGenerator._generate_event_dispatcher_implementations] Instance of &apos;ObjCFrontendDispatcherImplementationGenerator&apos; has no &apos;should_generate_events_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py:90:  [ObjCFrontendDispatcherImplementationGenerator._generate_event_dispatcher_implementations] Instance of &apos;ObjCFrontendDispatcherImplementationGenerator&apos; has no &apos;events_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_header.py:81:  [ObjCConfigurationHeaderGenerator._generate_properties_for_domain] Instance of &apos;ObjCConfigurationHeaderGenerator&apos; has no &apos;should_generate_commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_header.py:83:  [ObjCConfigurationHeaderGenerator._generate_properties_for_domain] Instance of &apos;ObjCConfigurationHeaderGenerator&apos; has no &apos;should_generate_events_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:48:  [CppBackendDispatcherImplementationGenerator.domains_to_generate.&lt;lambda&gt;] Instance of &apos;CppBackendDispatcherImplementationGenerator&apos; has no &apos;commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:95:  [CppBackendDispatcherImplementationGenerator._generate_dispatcher_implementations_for_domain] Instance of &apos;CppBackendDispatcherImplementationGenerator&apos; has no &apos;commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:110:  [CppBackendDispatcherImplementationGenerator._generate_small_dispatcher_switch_implementation_for_domain] Instance of &apos;CppBackendDispatcherImplementationGenerator&apos; has no &apos;commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:127:  [CppBackendDispatcherImplementationGenerator._generate_large_dispatcher_switch_implementation_for_domain] Instance of &apos;CppBackendDispatcherImplementationGenerator&apos; has no &apos;commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_internal_header.py:58:  [ObjCInternalHeaderGenerator.generate_output] Instance of &apos;ObjCInternalHeaderGenerator&apos; has no &apos;should_generate_events_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_internal_header.py:58:  [ObjCInternalHeaderGenerator.generate_output] Instance of &apos;ObjCInternalHeaderGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_internal_header.py:69:  [ObjCInternalHeaderGenerator._generate_event_dispatcher_private_interfaces] Instance of &apos;ObjCInternalHeaderGenerator&apos; has no &apos;events_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:50:  [ObjCBackendDispatcherHeaderGenerator.domains_to_generate] Instance of &apos;ObjCBackendDispatcherHeaderGenerator&apos; has no &apos;should_generate_commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:74:  [ObjCBackendDispatcherHeaderGenerator._generate_objc_forward_declarations] Instance of &apos;ObjCBackendDispatcherHeaderGenerator&apos; has no &apos;commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:79:  [ObjCBackendDispatcherHeaderGenerator._generate_objc_handler_declarations_for_domain] Instance of &apos;ObjCBackendDispatcherHeaderGenerator&apos; has no &apos;commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_protocol_type_conversions_implementation.py:53:  [ObjCProtocolTypeConversionsImplementationGenerator.domains_to_generate] Instance of &apos;ObjCProtocolTypeConversionsImplementationGenerator&apos; has no &apos;should_generate_types_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_protocol_type_conversions_implementation.py:83:  [ObjCProtocolTypeConversionsImplementationGenerator._generate_type_factory_category_interface] Instance of &apos;ObjCProtocolTypeConversionsImplementationGenerator&apos; has no &apos;type_declarations_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_protocol_type_conversions_implementation.py:107:  [ObjCProtocolTypeConversionsImplementationGenerator._generate_type_factory_category_implementation] Instance of &apos;ObjCProtocolTypeConversionsImplementationGenerator&apos; has no &apos;type_declarations_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/ChangeLog:378:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:379:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:380:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:381:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:382:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:383:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:384:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:385:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:386:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:387:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:388:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:389:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:390:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:391:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:392:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:393:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:394:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:395:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:396:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:397:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:398:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:399:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:400:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:401:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:402:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:403:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:404:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:405:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:406:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:407:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:408:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:409:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:410:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:411:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:412:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:413:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:414:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:415:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:416:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:417:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:418:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:419:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:420:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:421:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:422:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:423:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:424:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:425:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:426:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:427:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:428:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:429:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:430:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:431:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:432:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:433:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:434:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:435:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:143:  [generate_from_specification] Undefined variable &apos;CppBackendDispatcherHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:145:  [generate_from_specification] Undefined variable &apos;CppFrontendDispatcherHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:147:  [generate_from_specification] Undefined variable &apos;CppProtocolTypesHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:148:  [generate_from_specification] Undefined variable &apos;CppProtocolTypesImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:150:  [generate_from_specification] Undefined variable &apos;ObjCBackendDispatcherImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:152:  [generate_from_specification] Undefined variable &apos;ObjCConfigurationImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:156:  [generate_from_specification] Undefined variable &apos;ObjCProtocolTypeConversionsHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:158:  [generate_from_specification] Undefined variable &apos;ObjCProtocolTypesImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:163:  [generate_from_specification] Undefined variable &apos;CppBackendDispatcherHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:165:  [generate_from_specification] Undefined variable &apos;CppFrontendDispatcherHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:167:  [generate_from_specification] Undefined variable &apos;CppProtocolTypesHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:168:  [generate_from_specification] Undefined variable &apos;CppProtocolTypesImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:171:  [generate_from_specification] Undefined variable &apos;CppBackendDispatcherHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:173:  [generate_from_specification] Undefined variable &apos;CppProtocolTypesHeaderGenerator&apos;  [pylint/E0602] [5]

ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:174:  [generate_from_specification] Undefined variable &apos;CppProtocolTypesImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:178:  [generate_from_specification] Undefined variable &apos;ObjCProtocolTypeConversionsHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:180:  [generate_from_specification] Undefined variable &apos;ObjCProtocolTypesImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:184:  [generate_from_specification] Undefined variable &apos;ObjCBackendDispatcherImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:186:  [generate_from_specification] Undefined variable &apos;ObjCConfigurationImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:190:  [generate_from_specification] Undefined variable &apos;ObjCProtocolTypeConversionsHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:191:  [generate_from_specification] Undefined variable &apos;ObjCProtocolTypesImplementationGenerator&apos;  [pylint/E0602] [5]
Total errors found: 97 in 96 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>1262341</commentid>
    <comment_count>9</comment_count>
      <attachid>297661</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-12-22 11:33:44 -0800</bug_when>
    <thetext>Created attachment 297661
[PATCH 1/3 v2] Add --platform argument</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262343</commentid>
    <comment_count>10</comment_count>
      <attachid>297662</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-12-22 11:34:55 -0800</bug_when>
    <thetext>Created attachment 297662
[COMBINED PATCH v2]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262345</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-22 11:39:32 -0800</bug_when>
    <thetext>Attachment 297662 did not pass style-queue:

ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py:48:  [ObjCFrontendDispatcherImplementationGenerator.domains_to_generate] Instance of &apos;ObjCFrontendDispatcherImplementationGenerator&apos; has no &apos;should_generate_events_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py:70:  [ObjCFrontendDispatcherImplementationGenerator._generate_event_dispatcher_implementations] Instance of &apos;ObjCFrontendDispatcherImplementationGenerator&apos; has no &apos;should_generate_events_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py:90:  [ObjCFrontendDispatcherImplementationGenerator._generate_event_dispatcher_implementations] Instance of &apos;ObjCFrontendDispatcherImplementationGenerator&apos; has no &apos;events_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_header.py:81:  [ObjCConfigurationHeaderGenerator._generate_properties_for_domain] Instance of &apos;ObjCConfigurationHeaderGenerator&apos; has no &apos;should_generate_commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_header.py:83:  [ObjCConfigurationHeaderGenerator._generate_properties_for_domain] Instance of &apos;ObjCConfigurationHeaderGenerator&apos; has no &apos;should_generate_events_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:48:  [CppBackendDispatcherImplementationGenerator.domains_to_generate.&lt;lambda&gt;] Instance of &apos;CppBackendDispatcherImplementationGenerator&apos; has no &apos;commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:95:  [CppBackendDispatcherImplementationGenerator._generate_dispatcher_implementations_for_domain] Instance of &apos;CppBackendDispatcherImplementationGenerator&apos; has no &apos;commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:110:  [CppBackendDispatcherImplementationGenerator._generate_small_dispatcher_switch_implementation_for_domain] Instance of &apos;CppBackendDispatcherImplementationGenerator&apos; has no &apos;commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:127:  [CppBackendDispatcherImplementationGenerator._generate_large_dispatcher_switch_implementation_for_domain] Instance of &apos;CppBackendDispatcherImplementationGenerator&apos; has no &apos;commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_internal_header.py:58:  [ObjCInternalHeaderGenerator.generate_output] Instance of &apos;ObjCInternalHeaderGenerator&apos; has no &apos;should_generate_events_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_internal_header.py:58:  [ObjCInternalHeaderGenerator.generate_output] Instance of &apos;ObjCInternalHeaderGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_internal_header.py:69:  [ObjCInternalHeaderGenerator._generate_event_dispatcher_private_interfaces] Instance of &apos;ObjCInternalHeaderGenerator&apos; has no &apos;events_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:50:  [ObjCBackendDispatcherHeaderGenerator.domains_to_generate] Instance of &apos;ObjCBackendDispatcherHeaderGenerator&apos; has no &apos;should_generate_commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:74:  [ObjCBackendDispatcherHeaderGenerator._generate_objc_forward_declarations] Instance of &apos;ObjCBackendDispatcherHeaderGenerator&apos; has no &apos;commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:79:  [ObjCBackendDispatcherHeaderGenerator._generate_objc_handler_declarations_for_domain] Instance of &apos;ObjCBackendDispatcherHeaderGenerator&apos; has no &apos;commands_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_protocol_type_conversions_implementation.py:53:  [ObjCProtocolTypeConversionsImplementationGenerator.domains_to_generate] Instance of &apos;ObjCProtocolTypeConversionsImplementationGenerator&apos; has no &apos;should_generate_types_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_protocol_type_conversions_implementation.py:83:  [ObjCProtocolTypeConversionsImplementationGenerator._generate_type_factory_category_interface] Instance of &apos;ObjCProtocolTypeConversionsImplementationGenerator&apos; has no &apos;type_declarations_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_protocol_type_conversions_implementation.py:107:  [ObjCProtocolTypeConversionsImplementationGenerator._generate_type_factory_category_implementation] Instance of &apos;ObjCProtocolTypeConversionsImplementationGenerator&apos; has no &apos;type_declarations_for_domain&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/ChangeLog:378:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:379:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:380:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:381:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:382:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:383:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:384:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:385:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:386:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:387:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:388:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:389:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:390:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:391:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:392:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:393:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:394:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:395:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:396:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:397:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:398:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:399:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:400:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:401:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:402:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:403:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:404:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:405:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:406:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:407:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:408:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:409:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:410:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:411:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:412:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:413:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:414:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:415:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:416:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:417:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:418:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:419:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:420:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:421:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:422:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:423:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:424:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:425:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:426:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:427:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:428:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:429:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:430:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:431:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:432:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:433:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:434:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/ChangeLog:435:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:143:  [generate_from_specification] Undefined variable &apos;CppBackendDispatcherHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:145:  [generate_from_specification] Undefined variable &apos;CppFrontendDispatcherHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:147:  [generate_from_specification] Undefined variable &apos;CppProtocolTypesHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:148:  [generate_from_specification] Undefined variable &apos;CppProtocolTypesImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:150:  [generate_from_specification] Undefined variable &apos;ObjCBackendDispatcherImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:152:  [generate_from_specification] Undefined variable &apos;ObjCConfigurationImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:156:  [generate_from_specification] Undefined variable &apos;ObjCProtocolTypeConversionsHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:158:  [generate_from_specification] Undefined variable &apos;ObjCProtocolTypesImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:163:  [generate_from_specification] Undefined variable &apos;CppBackendDispatcherHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:165:  [generate_from_specification] Undefined variable &apos;CppFrontendDispatcherHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:167:  [generate_from_specification] Undefined variable &apos;CppProtocolTypesHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:168:  [generate_from_specification] Undefined variable &apos;CppProtocolTypesImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:171:  [generate_from_specification] Undefined variable &apos;CppBackendDispatcherHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:173:  [generate_from_specification] Undefined variable &apos;CppProtocolTypesHeaderGenerator&apos;  [pylint/E0602] [5]

ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:174:  [generate_from_specification] Undefined variable &apos;CppProtocolTypesImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:178:  [generate_from_specification] Undefined variable &apos;ObjCProtocolTypeConversionsHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:180:  [generate_from_specification] Undefined variable &apos;ObjCProtocolTypesImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:184:  [generate_from_specification] Undefined variable &apos;ObjCBackendDispatcherImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:186:  [generate_from_specification] Undefined variable &apos;ObjCConfigurationImplementationGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:190:  [generate_from_specification] Undefined variable &apos;ObjCProtocolTypeConversionsHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:191:  [generate_from_specification] Undefined variable &apos;ObjCProtocolTypesImplementationGenerator&apos;  [pylint/E0602] [5]
Total errors found: 97 in 96 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>1263505</commentid>
    <comment_count>12</comment_count>
      <attachid>297640</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-01-03 13:05:15 -0800</bug_when>
    <thetext>Comment on attachment 297640
[PATCH 2/3 v2] Move test cases into platform-specific directories

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

&gt; Tools/Scripts/webkitpy/inspector/main.py:136
&gt; +            if not os.path.isdir(input_directory) or not os.path.isdir(input_directory):

This checks the same path twice. I think the second check be using `reference_directory` instead of `input_directory`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263509</commentid>
    <comment_count>13</comment_count>
      <attachid>297638</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-01-03 13:21:14 -0800</bug_when>
    <thetext>Comment on attachment 297638
[PATCH 3/3] Parser/model/generator changes, and tests

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

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_js_backend_commands.py:70
&gt; +        commands = self.commands_for_domain(domain)
&gt; +        events = self.events_for_domain(domain)

It is a bit unfortunate that we have to do this commands_for_domain / events_for_domain dance everywhere. It makes the code a little more hectic and harder to read. But I don&apos;t have any good suggestions.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py:104
&gt; +    def commands_for_domain(self, domain):
&gt; +        return [command for command in domain.all_commands() if self.can_generate_platform(command.platform)]
&gt; +
&gt; +    def events_for_domain(self, domain):
&gt; +        return [event for event in domain.all_events() if self.can_generate_platform(event.platform)]

This unfortunately makes the code a little more noisy:

    self.domain.commands =&gt; self.commands_for_domain(domain)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263510</commentid>
    <comment_count>14</comment_count>
      <attachid>297662</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-01-03 13:27:52 -0800</bug_when>
    <thetext>Comment on attachment 297662
[COMBINED PATCH v2]

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263946</commentid>
    <comment_count>15</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-01-04 17:24:47 -0800</bug_when>
    <thetext>Landed:

https://trac.webkit.org/changeset/210307
https://trac.webkit.org/changeset/210308
https://trac.webkit.org/changeset/210309</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299555</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-04-21 01:23:19 -0700</bug_when>
    <thetext>The problem I see with this approach is that it only allows to set a single platform. This is a problem for example with the Automation.json. resizeWindowOfBrowsingContext and moveWindowOfBrowsingContext are only generated for macos platform, I guess because it&apos;s not supported in iOS. To generate them for the GTK+ port I would need to add a GTK+ platform and add another entry with platform: &quot;gtk&quot;, right? Or maybe we can change platform to platforms and make it a list. Although, in the particular case of these methods, I think we could remove the platform entirely and simply return FAIL_WITH_PREDEFINED_ERROR(NotImplemented); like we do with performMouseInteraction when not using APPKIT. The implementation of those methods is in mm files but it&apos;s actually cross-platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299626</commentid>
    <comment_count>17</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-04-21 08:18:05 -0700</bug_when>
    <thetext>See bug #171107</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297636</attachid>
            <date>2016-12-21 17:19:06 -0800</date>
            <delta_ts>2016-12-22 11:35:26 -0800</delta_ts>
            <desc>[PATCH 1/3] Add --platform argument</desc>
            <filename>bug-166003-20161221171803.patch</filename>
            <type>text/plain</type>
            <size>37131</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwMDkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
MzJiZWIwYWJkNDE5NTc3OWQ1ZmFlNWUyOTY2ZTc3Yzc0MDQ3M2I4Li4wZTRmYjEwNDJjMzAwMjc4
YzM3ZmI3OTEzYzI3NTIzMTMyMGVmYzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NSBAQAorMjAxNi0xMi0xNyAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiB0ZWFjaCB0aGUgcHJvdG9jb2wgZ2VuZXJhdG9yIGFib3V0
IHBsYXRmb3JtLXNwZWNpZmljIHR5cGVzLCBldmVudHMsIGFuZCBjb21tYW5kcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDAzCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8yODcxODk5MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgYSAtLXBsYXRmb3JtIGFyZ3VtZW50IHRvIGdlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSBhbmQgcHJvcGFnYXRlCisgICAgICAgIHRoZSBz
cGVjaWZpZWQgcGxhdGZvcm0gdG8gZWFjaCBnZW5lcmF0b3IuIFRoaXMgd2lsbCBiZSB1c2VkIGlu
IHRoZSBuZXh0IGZldyBwYXRjaGVzCisgICAgICAgIHRvIGV4Y2x1ZGUgdHlwZXMsIGV2ZW50cywg
YW5kIGNvbW1hbmRzIHRoYXQgYXJlIHVuc3VwcG9ydGVkIGJ5IHRoZSBiYWNrZW5kIHBsYXRmb3Jt
LgorCisgICAgICAgIENvdmVydCBhbGwgc3ViY2xhc3NlcyBvZiBHZW5lcmF0b3IgdG8gcGFzcyBh
bG9uZyB0aGVpciBwb3NpdGlvbmFsIGFyZ3VtZW50cyBzbyB0aGF0IHdlCisgICAgICAgIGNhbiBl
YXNpbHkgY2hhbmdlIGJhc2UgY2xhc3MgYXJndW1lbnRzIHdpdGhvdXQgZWRpdGluZyBhbGwgZ2Vu
ZXJhdG9yIGNvbnN0cnVjdG9ycy4KKworICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vY3BwX2dlbmVyYXRvci5weToKKyAgICAgICAgKENwcEdlbmVyYXRvci5fX2luaXRfXyk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRl
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAgIChDcHBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9faW5p
dF9fKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9i
YWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChDcHBCYWNrZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVy
X2hlYWRlci5weToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5fX2luaXRfXyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENw
cEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90
eXBlc19oZWFkZXIucHk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9y
Ll9faW5pdF9fKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENwcFByb3Rv
Y29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5Ogor
ICAgICAgICAoSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5OgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJh
dG9yLl9faW5pdF9fKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAo
T2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRp
b25faGVhZGVyLnB5OgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25IZWFkZXJHZW5lcmF0b3Iu
X19pbml0X18pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0JhY2tl
bmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaGVhZGVyLnB5OgorICAgICAgICAoT2JqQ0hlYWRl
ckdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weToKKyAgICAgICAgKE9iakNJbnRlcm5h
bEhlYWRlckdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5
OgorICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSGVhZGVyR2VuZXJhdG9yLl9f
aW5pdF9fKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAg
KE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5p
dF9fKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
cHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChPYmpDUHJvdG9jb2xU
eXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgUGFzcyBhbG9u
ZyAqYXJncyBpbnN0ZWFkIG9mIHNpbmdsZSBwb3NpdGlvbmFsIGFyZ3VtZW50cy4KKworICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5OgorICAgICAgICAoR2Vu
ZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgU2F2ZSB0aGUgdGFyZ2V0IHBsYXRmb3JtIGFuZCBh
ZGQgYSBnZXR0ZXIuCisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVs
cy5weToKKyAgICAgICAgKFBsYXRmb3JtKToKKyAgICAgICAgKFBsYXRmb3JtLl9faW5pdF9fKToK
KyAgICAgICAgKFBsYXRmb3JtLmZyb21TdHJpbmcpOgorICAgICAgICAoUGxhdGZvcm1zKToKKyAg
ICAgICAgRGVmaW5lIHRoZSBhbGxvd2VkIFBsYXRmb3JtIGluc3RhbmNlcyAoaU9TLCBtYWNPUywg
YW5kIEFueSkuCisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2Vu
ZXJhdG9yLnB5OgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5hbmQuX19pbml0X18pOgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weToKKyAgICAgICAgKGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbik6CisgICAgICAgIFBh
c3MgYWxvbmcgKmFyZ3MgaW5zdGVhZCBvZiBzaW5nbGUgcG9zaXRpb25hbCBhcmd1bWVudHMuCisK
IDIwMTYtMTItMjEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAg
ICAgICAgV2ViQXNzZW1ibHk6IEFsbG93IGJyLCBicl9pZiwgYW5kIGJyX3RhYmxlIHRvIGFjdCBh
cyBhIHJldHVybgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKaW5kZXggNmJiNjZmZDUy
ZjVlNmMyYmEwMmZlZWUwMDkyMTVmZWFmOGIwMjUxNS4uYzQ1OWZjYWMzYWY3MDQ5MmQ2YTMwZjM3
YmRkZWZmMWFkYTZmNjdmYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5CkBAIC00
NCw4ICs0NCw4IEBAIF9QUklNSVRJVkVfVE9fQ1BQX05BTUVfTUFQID0gewogfQogCiBjbGFzcyBD
cHBHZW5lcmF0b3IoR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlu
cHV0X2ZpbGVwYXRoKToKLSAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBp
bnB1dF9maWxlcGF0aCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToK
KyAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKIAogICAg
IGRlZiBwcm90b2NvbF9uYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5tb2RlbCgpLmZy
YW1ld29yay5zZXR0aW5nKCdjcHBfcHJvdG9jb2xfZ3JvdXAnLCAnJykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVf
YmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCAyOTc1NjE1ZTZiMDNiNTVhMTk4NGY4
ZDEzMTUyZDY5NTUzODM2NjdiLi4zYWIxNjMwMTg0M2VlMDQxYzQ1MjUwMWE0MmI2Zjc4MzI0YmFh
YjcyIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0z
Nyw4ICszNyw4IEBAIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCiAKIGNsYXNz
IENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAg
ICAgIENwcEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIENwcEdlbmVy
YXRvci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgb3V0cHV0X2Zp
bGVuYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gJyVzQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgnICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5k
ZXggODUwM2Y2YmI2ZGZhNGI3NDA0Nzg4YmE3MmNhOWNmYTFhMjNkMmI3NS4uYTM1NzlhYzNlZTA2
ZWE5MWQ4NWNmNTg0OWI5ZDZkZGQxMGUxMTU0MSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkK
QEAgLTM5LDggKzM5LDggQEAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKIAog
Y2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToK
LSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAg
Q3BwR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgQ3BwR2VuZXJhdG9y
Ll9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKIAogICAgIGRlZiBvdXRwdXRfZmlsZW5h
bWUoc2VsZik6CiAgICAgICAgIHJldHVybiAiJXNCYWNrZW5kRGlzcGF0Y2hlcnMuaCIgJSBzZWxm
LnByb3RvY29sX25hbWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkK
aW5kZXggOWFlY2M0YmNhOTJmMmRkZjhjZmM0Nzc1ZmE4MDJmZDlkYzgxZDI2Ny4uOTg5YzVhM2Jh
NTI3YjczMWM3ZWI2Mzc5NDIwZTFkZGFjZTUwMDBiOCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uLnB5CkBAIC0zOCw4ICszOCw4IEBAIGxvZyA9IGxvZ2dpbmcuZ2V0TG9n
Z2VyKCdnbG9iYWwnKQogCiAKIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWws
IGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAgQ3BwR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1v
ZGVsLCBpbnB1dF9maWxlcGF0aCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dh
cmdzKToKKyAgICAgICAgQ3BwR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJn
cykKIAogICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiAiJXNC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwIiAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0
Y2hlcl9oZWFkZXIucHkKaW5kZXggZjU5Yjk4NGVkNzJmYjc0YTYzMDJlMGU1YmFiY2I5MjZiZmUy
ZTkwOC4uMDE1ZDU3ZTI1MjVkNWQ3MTMyMGUzMTRlNTk3ZDdkZDNlMWRjODBiYyAxMDA3NTUKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9k
aXNwYXRjaGVyX2hlYWRlci5weQpAQCAtMzksOCArMzksOCBAQCBsb2cgPSBsb2dnaW5nLmdldExv
Z2dlcignZ2xvYmFsJykKIAogCiBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IoQ3BwR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0
X2ZpbGVwYXRoKToKLSAgICAgICAgQ3BwR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBp
bnB1dF9maWxlcGF0aCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToK
KyAgICAgICAgQ3BwR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKIAog
ICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiAiJXNGcm9udGVu
ZERpc3BhdGNoZXJzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9m
cm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggNzE2NzJjNDZjMTA5ZDc1OTI0YzY5YTBiNmI1
MzUyYzZkN2IwM2RjMi4uODI2OWM5Y2Y5Mjc3ODZiM2MyZWRhYjBhMmQ2MmZlNWM0NTA4MTE5MyAx
MDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTM4LDggKzM4
LDggQEAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKIAogY2xhc3MgQ3BwRnJv
bnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAgQ3Bw
R2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgQ3BwR2VuZXJhdG9yLl9f
aW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKIAogICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUo
c2VsZik6CiAgICAgICAgIHJldHVybiAiJXNGcm9udGVuZERpc3BhdGNoZXJzLmNwcCIgJSBzZWxm
LnByb3RvY29sX25hbWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5w
eSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkKaW5kZXggMDcwNGIzZTFlMGQxZGJiNTI4
M2FiN2I2YWY2MTRiMTE5MjBiODE2NS4uZjFjYjg4ZGFlYmMwMTFlYjU2NTdiMTk4NTAyNTUzYjc0
YTNjOTAyOSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9j
cHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CkBAIC00MCw4ICs0MCw4IEBAIGxvZyA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCiAKIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJH
ZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlu
cHV0X2ZpbGVwYXRoKToKLSAgICAgICAgQ3BwR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVs
LCBpbnB1dF9maWxlcGF0aCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdz
KToKKyAgICAgICAgQ3BwR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykK
IAogICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiAiJXNQcm90
b2NvbE9iamVjdHMuaCIgJSBzZWxmLnByb3RvY29sX25hbWUoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3By
b3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxl
bWVudGF0aW9uLnB5CmluZGV4IDdiYmI5MDMyN2M0NmI4YjhiNDZiYjA2MTFmYzY2ODRkYWY0OTli
YzYuLjMzNTRlMDQ5YWM5MGJlNTFlNjllMzI4NGM3NTc0YzI5YWZiYmFmOTEgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xf
dHlwZXNfaW1wbGVtZW50YXRpb24ucHkKQEAgLTM5LDggKzM5LDggQEAgbG9nID0gbG9nZ2luZy5n
ZXRMb2dnZXIoJ2dsb2JhbCcpCiAKIAogY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0
aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVs
LCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIENwcEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBt
b2RlbCwgaW5wdXRfZmlsZXBhdGgpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3
YXJncyk6CisgICAgICAgIENwcEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2Fy
Z3MpCiAKICAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gIiVz
UHJvdG9jb2xPYmplY3RzLmNwcCIgJSBzZWxmLnByb3RvY29sX25hbWUoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
anNfYmFja2VuZF9jb21tYW5kcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkKaW5kZXggMzM5
MmM3ODQ1OTNjOTE0N2NiZjg0NTY3YTgxNzU4MGM3Zjk2Y2IxZC4uYTRiNTdiODRjYjQ0NGRlMWM1
YzFkYmMwMTA1NjAwMzU2YTZkYmRkYiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5w
eQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5CkBAIC0zNyw4ICszNyw4IEBAIGxvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCiAKIGNsYXNzIEpTQmFja2VuZENvbW1hbmRzR2Vu
ZXJhdG9yKEdlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9m
aWxlcGF0aCk6Ci0gICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRf
ZmlsZXBhdGgpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAg
ICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYg
b3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gIkluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5w
eSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCBhNTUyYjQ2ZjI5ZjM1
NTY2MTAwOTc1NmQ3MTdiMWE2MTQ3YTBhMjNhLi43MGU1MzQyM2M4YzQ4OWU4MjM3YmIxMjA1NGM3
YmU4MjAxMGEwYjM1IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC00MCw4ICs0MCw4
IEBAIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCiAKIGNsYXNzIE9iakNCYWNr
ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKLSAgICBkZWYgX19p
bml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAgT2JqQ0dlbmVyYXRv
ci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIE9iakNHZW5lcmF0b3IuX19pbml0X18o
c2VsZiwgKmFyZ3MsICoqa3dhcmdzKQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToK
ICAgICAgICAgcmV0dXJuICclc0JhY2tlbmREaXNwYXRjaGVycy5oJyAlIHNlbGYucHJvdG9jb2xf
bmFtZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDlk
NWYwMzkxZTVhNWUyZWFiZDI5MTVmMWUwNmYwYjBlMTFlNWQ5YzAuLjBmNDZkZTQ0MGZiOWZmMDE4
Y2RjMTMxM2RmMzI1MmUxZGVmY2E4MzcgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uLnB5CkBAIC00MCw4ICs0MCw4IEBAIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdn
bG9iYWwnKQogCiAKIGNsYXNzIE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IoT2JqQ0dlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9m
aWxlcGF0aCk6Ci0gICAgICAgIE9iakNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlu
cHV0X2ZpbGVwYXRoKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgor
ICAgICAgICBPYmpDR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKIAog
ICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiAnJXNCYWNrZW5k
RGlzcGF0Y2hlcnMubW0nICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
Y29uZmlndXJhdGlvbl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5Cmlu
ZGV4IDVlOWM5ZTAwMDgzODI5NjUzYzcyZDFkMjI3ZWI0ZDJhMDk4ZTMzY2IuLjIyZDJjNDIxNzc2
NDBkY2U5NWQ1YjYzYmM1NTVjNzY1NDJmMTY3ZDggMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmlndXJh
dGlvbl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hlYWRlci5weQpAQCAtMzcs
OCArMzcsOCBAQCBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIAogCiBjbGFzcyBP
YmpDQ29uZmlndXJhdGlvbkhlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKLSAgICBkZWYg
X19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAgT2JqQ0dlbmVy
YXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIE9iakNHZW5lcmF0b3IuX19pbml0
X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxm
KToKICAgICAgICAgcmV0dXJuICclc0NvbmZpZ3VyYXRpb24uaCcgJSBzZWxmLnByb3RvY29sX25h
bWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDJhNDgyMmRmYzJlNzFk
YmYxNWVmZTgyNjZmMjAxMzVjNDc5ZmU1NDAuLjliNTA2OTA3ZDZhMzNjOThhNTI2YjA4NDdjYzVj
ODk5YjlmMTk0NWIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlv
bi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkKQEAgLTM3LDgg
KzM3LDggQEAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKIAogY2xhc3MgT2Jq
Q0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAg
IE9iakNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBPYmpDR2VuZXJh
dG9yLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKIAogICAgIGRlZiBvdXRwdXRfZmls
ZW5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiAnJXNDb25maWd1cmF0aW9uLm1tJyAlIHNlbGYu
cHJvdG9jb2xfbmFtZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHkKaW5kZXggMTQwN2E2MGFiNjg3MDI1NzI4MWU4MGE1YzAxZjZkZjIyZWQzZWI1YS4uOGQ3Mjlj
MzAwNDkzNTQxMDEzNDYxOWNmNWRmM2FiYjg2ZmJlOGNlMSAxMDA3NTUKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9u
dGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMzgsOCArMzgsOCBAQCBsb2cgPSBsb2dnaW5n
LmdldExvZ2dlcignZ2xvYmFsJykKIAogCiBjbGFzcyBPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIE9iakNHZW5lcmF0b3IuX19pbml0
X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAq
YXJncywgKiprd2FyZ3MpOgorICAgICAgICBPYmpDR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsICph
cmdzLCAqKmt3YXJncykKIAogICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CiAgICAgICAg
IHJldHVybiAnJXNFdmVudERpc3BhdGNoZXJzLm1tJyAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaGVhZGVyLnB5CmluZGV4IGY1YmE3YWJh
ZmIxMzE0YzdjZDhhYjI4OGQwMTc2Y2YzMmRkMmFiYzMuLmJkOGYwNWRkZmJmODY3OTVhMjZmNTg0
MDM2ZDg0YzRjNzNjZDAzOWMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaGVhZGVyLnB5CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
aGVhZGVyLnB5CkBAIC00NCw4ICs0NCw4IEBAIGRlZiBhZGRfbmV3bGluZShsaW5lcyk6CiAKIAog
Y2xhc3MgT2JqQ0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0
X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAgT2JqQ0dlbmVyYXRvci5f
X2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIE9iakNHZW5lcmF0b3IuX19pbml0X18oc2Vs
ZiwgKmFyZ3MsICoqa3dhcmdzKQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKICAg
ICAgICAgcmV0dXJuICclcy5oJyAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9v
YmpjX2ludGVybmFsX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVyLnB5CmluZGV4IDQ3
MDA2Y2ZjNWRiZjdmMTMyNzM0N2IyZTIxNzc1YWIyYjI2Y2I0YzEuLjc3NDg4ZjZkNTQwZmUwM2Iz
OTE4ODUwZjZlMjY2Y2EzNjM4ZjliM2MgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVy
LnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVyLnB5CkBAIC0zNyw4ICszNyw4IEBAIGxvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCiAKIGNsYXNzIE9iakNJbnRlcm5hbEhlYWRl
ckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWws
IGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAgT2JqQ0dlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBt
b2RlbCwgaW5wdXRfZmlsZXBhdGgpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3
YXJncyk6CisgICAgICAgIE9iakNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dh
cmdzKQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKICAgICAgICAgcmV0dXJuICcl
c0ludGVybmFsLmgnICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJv
dG9jb2xfdHlwZV9jb252ZXJzaW9uc19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29u
dmVyc2lvbnNfaGVhZGVyLnB5CmluZGV4IDU1ZGFiZjQ2ZTllNTNlNTJmM2JlNDllZjZkZmY5YWQw
MDU3YzJmYTguLjhjMzgzZDFlOTE0YTQyMGM1ZGIzNzUxZGFkOWI0NjliNzVkZTk0NGUgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19oZWFkZXIucHkKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hlYWRlci5weQpAQCAtNDQsOCArNDQsOCBAQCBk
ZWYgYWRkX25ld2xpbmUobGluZXMpOgogCiAKIGNsYXNzIE9iakNQcm90b2NvbFR5cGVDb252ZXJz
aW9uc0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2Vs
ZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAgT2JqQ0dlbmVyYXRvci5fX2luaXRf
XyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICph
cmdzLCAqKmt3YXJncyk6CisgICAgICAgIE9iakNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgKmFy
Z3MsICoqa3dhcmdzKQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKICAgICAgICAg
cmV0dXJuICclc1R5cGVDb252ZXJzaW9ucy5oJyAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkKaW5kZXgg
OTcyMmFhNGFlY2U0MTExYmQ5YmYxMTI1OWIxMjU4MWE3MDIyZDM0MC4uYmFkZGNmM2NkNGM5YTNm
N2ZiM2NjZWE4NzFkOTM5N2RjNjJlNjg4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBl
X2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9j
b252ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5weQpAQCAtNDMsOCArNDMsOCBAQCBkZWYgYWRkX25l
d2xpbmUobGluZXMpOgogCiAKIGNsYXNzIE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0ltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBPYmpDR2VuZXJhdG9yLl9faW5pdF9f
KHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFy
Z3MsICoqa3dhcmdzKToKKyAgICAgICAgT2JqQ0dlbmVyYXRvci5fX2luaXRfXyhzZWxmLCAqYXJn
cywgKiprd2FyZ3MpCiAKICAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgogICAgICAgICBy
ZXR1cm4gJyVzVHlwZUNvbnZlcnNpb25zLm1tJyAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90
b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQppbmRleCAzNjYzZDZkOGUzZDc0NDg3YzZjNjU2
M2JiMGZmZGI2NTg0MjY5YTJiLi5iYTBlMmVlOWU2NDU5OTY2MmQ3NDU2Y2I1MzQzYTg4NjljMDJm
YzU3IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKQEAgLTQ0LDggKzQ0LDgg
QEAgZGVmIGFkZF9uZXdsaW5lKGxpbmVzKToKIAogCiBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlc0lt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBPYmpDR2VuZXJhdG9yLl9faW5p
dF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
KmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgT2JqQ0dlbmVyYXRvci5fX2luaXRfXyhzZWxmLCAq
YXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgogICAgICAg
ICByZXR1cm4gJyVzVHlwZXMubW0nICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRv
ci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRvci5weQppbmRleCA4NTUwMjcyOTdlNWVlOGIwZGVjN2M3ODkwMjAwNmYwYjU2MTgwMzUz
Li5iMDk2ZWY1MGY4ZDlmNjdmZmI2ZjViYTAxN2JiNjY3YzVlNzVjZTBkIDEwMDc1NQotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3Iu
cHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdG9yLnB5CkBAIC03NiwxNCArNzYsMTggQEAgX1RZUEVTX1dJVEhfT1BFTl9GSUVMRFMg
PSBzZXQoWwogCiAKIGNsYXNzIEdlbmVyYXRvcjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9k
ZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIHBsYXRm
b3JtLCBpbnB1dF9maWxlcGF0aCk6CiAgICAgICAgIHNlbGYuX21vZGVsID0gbW9kZWwKKyAgICAg
ICAgc2VsZi5fcGxhdGZvcm0gPSBwbGF0Zm9ybQogICAgICAgICBzZWxmLl9pbnB1dF9maWxlcGF0
aCA9IGlucHV0X2ZpbGVwYXRoCiAgICAgICAgIHNlbGYuX3NldHRpbmdzID0ge30KIAogICAgIGRl
ZiBtb2RlbChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX21vZGVsCiAKKyAgICBkZWYgcGxh
dGZvcm0oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wbGF0Zm9ybQorCiAgICAgZGVmIHNl
dF9nZW5lcmF0b3Jfc2V0dGluZyhzZWxmLCBrZXksIHZhbHVlKToKICAgICAgICAgc2VsZi5fc2V0
dGluZ3Nba2V5XSA9IHZhbHVlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weQppbmRleCA3MTQ0YTk4MzI3OGQ2
MTJiOTQxNTU5MWQxOTAzZDVhMzRlZmNlNWM4Li42NzgwNjBlMjcwYTYyMjRkODNhNGQ0NzhmZThj
YzdhOTc1OWViZDAxIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5CkBAIC0xMDksNiArMTA5LDM1IEBAIGNs
YXNzIEZyYW1ld29ya3M6CiAgICAgVGVzdCA9IEZyYW1ld29yaygiVGVzdCIpCiAKIAorY2xhc3Mg
UGxhdGZvcm06CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLm5h
bWUgPSBuYW1lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGZyb21TdHJpbmcocGxhdGZv
cm1TdHJpbmcpOgorICAgICAgICBwbGF0Zm9ybVN0cmluZyA9IHBsYXRmb3JtU3RyaW5nLmxvd2Vy
KCkKKyAgICAgICAgaWYgcGxhdGZvcm1TdHJpbmcgPT0gImlvcyI6CisgICAgICAgICAgICByZXR1
cm4gUGxhdGZvcm1zLmlPUworCisgICAgICAgIGlmIHBsYXRmb3JtU3RyaW5nID09ICJtYWNvcyI6
CisgICAgICAgICAgICByZXR1cm4gUGxhdGZvcm1zLm1hY09TCisKKyAgICAgICAgaWYgcGxhdGZv
cm1TdHJpbmcgPT0gImFsbCI6CisgICAgICAgICAgICByZXR1cm4gUGxhdGZvcm1zLkFsbAorCisg
ICAgICAgIGlmIHBsYXRmb3JtU3RyaW5nID09ICJnZW5lcmljIiBvciBub3QgcGxhdGZvcm1TdHJp
bmc6CisgICAgICAgICAgICByZXR1cm4gUGxhdGZvcm1zLkdlbmVyaWMKKworICAgICAgICByYWlz
ZSBQYXJzZUV4Y2VwdGlvbigiVW5rbm93biBwbGF0Zm9ybTogJXMiICUgcGxhdGZvcm1TdHJpbmcp
CisKKworY2xhc3MgUGxhdGZvcm1zOgorICAgIEFsbCA9IFBsYXRmb3JtKCJBbGwiKQorICAgIEdl
bmVyaWMgPSBQbGF0Zm9ybSgiZ2VuZXJpYyIpCisgICAgaU9TID0gUGxhdGZvcm0oImlPUyIpCisg
ICAgbWFjT1MgPSBQbGF0Zm9ybSgibWFjT1MiKQorCisKIGNsYXNzIFR5cGVSZWZlcmVuY2U6CiAg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVfa2luZCwgcmVmZXJlbmNlZF90eXBlX25hbWUsIGVu
dW1fdmFsdWVzLCBhcnJheV9pdGVtcyk6CiAgICAgICAgIHNlbGYudHlwZV9raW5kID0gdHlwZV9r
aW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9vYmpjX2dlbmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5CmluZGV4IGNhZDg3MmQxMDE3MWU2
N2ZmOTcxODZkMGUyYTVlZWQ2MDJjYjAwY2UuLjc5YzA1ZjQ5MzM4Mjc1MDM2YjMyOWU1ZDllMzlh
YzFhOWJmM2NmMTEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5CkBAIC04OSw4
ICs4OSw4IEBAIGNsYXNzIE9iakNHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICBPQkpDX1NIQVJF
RF9QUkVGSVggPSAnUHJvdG9jb2wnCiAgICAgT0JKQ19TVEFUSUNfUFJFRklYID0gJyVzJXMnICUg
KE9CSkNfSEVMUEVSX1BSRUZJWCwgT0JKQ19TSEFSRURfUFJFRklYKQogCi0gICAgZGVmIF9faW5p
dF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIEdlbmVyYXRvci5fX2lu
aXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
ICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCAqYXJn
cywgKiprd2FyZ3MpCiAKICAgICAjIFRoZSAncHJvdG9jb2wgbmFtZScgaXMgdXNlZCB0byBwcmVm
aXggZmlsZW5hbWVzIGZvciBhIHByb3RvY29sIGdyb3VwIChhIHNldCBvZiBkb21haW5zIGdlbmVy
YXRlZCB0b2dldGhlcikuCiAgICAgZGVmIHByb3RvY29sX25hbWUoc2VsZik6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQppbmRleCA0
YWYwNzg3ZDAxNzVjZDk1NmFkMzExMWY0YzMwMjBmZDY4NDE3ODNiLi5lZjljOWQ0ZTM3NjRjM2Nk
OTgzNTA4NGJjMDNiOTMzOTdkYzM2ZWQ3IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKQEAgLTEsNiArMSw2IEBACiAjIS91c3Iv
YmluL2VudiBweXRob24KICMKLSMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMTQsNiAr
MTE0LDcgQEAgZGVmIGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbihwcmltYXJ5X3NwZWNpZmlj
YXRpb25fZmlsZXBhdGg9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cHV0X2RpcnBhdGg9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2Vf
b3V0cHV0PUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXdvcmtf
bmFtZT0iIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1fbmFtZT0i
IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfZnJvbnRlbmQ9VHJ1
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfYmFja2VuZD1UcnVl
KToKIApAQCAtMTI1LDYgKzEyNiw3IEBAIGRlZiBnZW5lcmF0ZV9mcm9tX3NwZWNpZmljYXRpb24o
cHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoPU5vbmUsCiAgICAgICAgIGV4Y2VwdCBWYWx1
ZUVycm9yIGFzIGU6CiAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkVycm9yIHBhcnNpbmcg
dmFsaWQgSlNPTiBpbiBmaWxlOiAiICsgZmlsZXBhdGggKyAiXG5QYXJzZSBlcnJvcjogIiArIHN0
cihlKSkKIAorICAgIHBsYXRmb3JtID0gUGxhdGZvcm0uZnJvbVN0cmluZyhwbGF0Zm9ybV9uYW1l
KQogICAgIHByb3RvY29sID0gbW9kZWxzLlByb3RvY29sKGZyYW1ld29ya19uYW1lKQogICAgIGZv
ciBzcGVjaWZpY2F0aW9uIGluIHN1cHBsZW1lbnRhbF9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoczoK
ICAgICAgICAgbG9hZF9zcGVjaWZpY2F0aW9uKHByb3RvY29sLCBzcGVjaWZpY2F0aW9uLCBpc1N1
cHBsZW1lbnRhbD1UcnVlKQpAQCAtMTMyLDU5ICsxMzQsNjEgQEAgZGVmIGdlbmVyYXRlX2Zyb21f
c3BlY2lmaWNhdGlvbihwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGg9Tm9uZSwKIAogICAg
IHByb3RvY29sLnJlc29sdmVfdHlwZXMoKQogCisgICAgZ2VuZXJhdG9yX2FyZ3VtZW50cyA9IFtw
cm90b2NvbCwgcGxhdGZvcm0sIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aF0KICAgICBn
ZW5lcmF0b3JzID0gW10KKwogICAgIGlmIHByb3RvY29sLmZyYW1ld29yayBpcyBGcmFtZXdvcmtz
LlRlc3Q6Ci0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEpTQmFja2VuZENvbW1hbmRzR2VuZXJh
dG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBn
ZW5lcmF0b3JzLmFwcGVuZChDcHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVy
YXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAg
Z2VuZXJhdG9ycy5hcHBlbmQoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IocHJv
dG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRv
cnMuYXBwZW5kKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJv
dG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRv
cnMuYXBwZW5kKENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwg
cHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBl
bmQoQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2ws
IHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBw
ZW5kKENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3Bl
Y2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcFByb3Rv
Y29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZp
Y2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0JhY2tlbmRE
aXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25f
ZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDQmFja2VuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9u
X2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0NvbmZpZ3VyYXRpb25I
ZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkp
Ci0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRp
b25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0g
ICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkK
LSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0hlYWRlckdlbmVyYXRvcihwcm90b2NvbCwg
cHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBl
bmQoT2JqQ0ludGVybmFsSGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmlj
YXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDUHJvdG9jb2xU
eXBlQ29udmVyc2lvbnNIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNh
dGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNQcm90b2NvbFR5
cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3Nw
ZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDUHJv
dG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNp
ZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChKU0JhY2tlbmRD
b21tYW5kc0dlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRv
cnMuYXBwZW5kKENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKCpn
ZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAg
ICBnZW5lcmF0b3JzLmFwcGVuZChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQo
Q3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRz
KSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0
b3JzLmFwcGVuZChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJn
dW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwUHJvdG9jb2xUeXBlc0ltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJh
dG9ycy5hcHBlbmQoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0
b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0JhY2tlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAg
ICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDQ29uZmlndXJhdGlvbkhlYWRlckdlbmVyYXRvcigq
Z2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNDb25m
aWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQor
ICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50
YXRpb25HZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3Jz
LmFwcGVuZChPYmpDSGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAg
ICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0ludGVybmFsSGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0
b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ1Byb3RvY29sVHlw
ZUNvbnZlcnNpb25zSGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAg
ICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSW1wbGVtZW50
YXRpb25HZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3Jz
LmFwcGVuZChPYmpDUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKCpnZW5lcmF0
b3JfYXJndW1lbnRzKSkKIAogICAgIGVsaWYgcHJvdG9jb2wuZnJhbWV3b3JrIGlzIEZyYW1ld29y
a3MuSmF2YVNjcmlwdENvcmU6Ci0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEpTQmFja2VuZENv
bW1hbmRzR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgp
KQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ckhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRo
KSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJH
ZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAg
ICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAg
ICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
cihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2Vu
ZXJhdG9ycy5hcHBlbmQoQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdl
bmVyYXRvcnMuYXBwZW5kKENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2ws
IHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBw
ZW5kKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJp
bWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQo
SlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAg
ICBnZW5lcmF0b3JzLmFwcGVuZChDcHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdl
bmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5k
KENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRz
KSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRv
cnMuYXBwZW5kKENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcigqZ2VuZXJhdG9y
X2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcEZyb250ZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAg
ICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcigqZ2Vu
ZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcFByb3RvY29s
VHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCiAKICAg
ICBlbGlmIHByb3RvY29sLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLldlYktpdCBhbmQgZ2VuZXJh
dGVfYmFja2VuZDoKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0
aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0
aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5l
cmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAg
IGdlbmVyYXRvcnMuYXBwZW5kKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
cihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2Vu
ZXJhdG9ycy5hcHBlbmQoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoKmdlbmVy
YXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBCYWNrZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAg
ICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcigq
Z2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcFByb3Rv
Y29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCiAK
ICAgICBlbGlmIHByb3RvY29sLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLldlYktpdCBhbmQgZ2Vu
ZXJhdGVfZnJvbnRlbmQ6Ci0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNIZWFkZXJHZW5l
cmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAg
IGdlbmVyYXRvcnMuYXBwZW5kKE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0hlYWRlckdlbmVy
YXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAg
Z2VuZXJhdG9ycy5hcHBlbmQoT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSW1wbGVtZW50YXRp
b25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0g
ICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAg
ICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNIZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1
bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDUHJvdG9jb2xUeXBlQ29udmVy
c2lvbnNIZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5l
cmF0b3JzLmFwcGVuZChPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5k
KE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1
bWVudHMpKQogCiAgICAgZWxpZiBwcm90b2NvbC5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5XZWJJ
bnNwZWN0b3I6Ci0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNCYWNrZW5kRGlzcGF0Y2hl
ckhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRo
KSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0
aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNDb25maWd1cmF0aW9uSGVhZGVyR2Vu
ZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAg
ICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJh
dG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBn
ZW5lcmF0b3JzLmFwcGVuZChPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAg
IGdlbmVyYXRvcnMuYXBwZW5kKE9iakNIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlf
c3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNJ
bnRlcm5hbEhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2Zp
bGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ1Byb3RvY29sVHlwZUNvbnZl
cnNpb25zSGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmls
ZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDUHJvdG9jb2xUeXBlc0ltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBh
dGgpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFk
ZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFw
cGVuZChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcigqZ2VuZXJh
dG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNDb25maWd1cmF0
aW9uSGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJh
dG9ycy5hcHBlbmQoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvcigqZ2Vu
ZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNGcm9udGVu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykp
CisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNIZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRv
cl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDSW50ZXJuYWxIZWFk
ZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFw
cGVuZChPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNIZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRv
cl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDUHJvdG9jb2xUeXBl
c0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKIAogICAgIHNp
bmdsZV9vdXRwdXRfZmlsZV9jb250ZW50cyA9IFtdCiAKQEAgLTIxNiw2ICsyMjAsNyBAQCBkZWYg
Z2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0
aD1Ob25lLAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIGFsbG93ZWRfZnJhbWV3
b3JrX25hbWVzID0gWydKYXZhU2NyaXB0Q29yZScsICdXZWJJbnNwZWN0b3InLCAnV2ViS2l0Jywg
J1Rlc3QnXQorICAgIGFsbG93ZWRfcGxhdGZvcm1fbmFtZXMgPSBbJ2lPUycsICdtYWNPUycsICdh
bGwnLCAnZ2VuZXJpYyddCiAgICAgY2xpX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1
c2FnZT0idXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBQcmltYXJ5UHJvdG9jb2wuanNvbiBbU3VwcGxl
bWVudGFsUHJvdG9jb2wuanNvbiAuLi5dIikKICAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi1v
IiwgIi0tb3V0cHV0RGlyIiwgaGVscD0iRGlyZWN0b3J5IHdoZXJlIGdlbmVyYXRlZCBmaWxlcyBz
aG91bGQgYmUgd3JpdHRlbi4iKQogICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLS1mcmFtZXdv
cmsiLCB0eXBlPSJjaG9pY2UiLCBjaG9pY2VzPWFsbG93ZWRfZnJhbWV3b3JrX25hbWVzLCBoZWxw
PSJUaGUgZnJhbWV3b3JrIHRoYXQgdGhlIHByaW1hcnkgc3BlY2lmaWNhdGlvbiBiZWxvbmdzIHRv
LiIpCkBAIC0yMjQsNiArMjI5LDcgQEAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBj
bGlfcGFyc2VyLmFkZF9vcHRpb24oIi10IiwgIi0tdGVzdCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIs
IGhlbHA9IkVuYWJsZSB0ZXN0IG1vZGUuIFVzZSB1bmlxdWUgb3V0cHV0IGZpbGVuYW1lcyBjcmVh
dGVkIGJ5IHByZXBlbmRpbmcgdGhlIGlucHV0IGZpbGVuYW1lLiIpCiAgICAgY2xpX3BhcnNlci5h
ZGRfb3B0aW9uKCItLWZyb250ZW5kIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iR2VuZXJh
dGUgY29kZSBmb3IgdGhlIGZyb250ZW5kLXNpZGUgb2YgdGhlIHByb3RvY29sIG9ubHkuIikKICAg
ICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0tYmFja2VuZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIs
IGhlbHA9IkdlbmVyYXRlIGNvZGUgZm9yIHRoZSBiYWNrZW5kLXNpZGUgb2YgdGhlIHByb3RvY29s
IG9ubHkuIikKKyAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0tcGxhdGZvcm0iLCBoZWxwPSJU
aGUgcGxhdGZvcm0gb2YgdGhlIGJhY2tlbmQgYmVpbmcgZ2VuZXJhdGVkLiBGb3IgZXhhbXBsZSwg
d2UgY29tcGlsZSBXZWJLaXQyIGZvciBlaXRoZXIgbWFjT1Mgb3IgaU9TLiBUaGlzIHZhbHVlIGlz
IGNhc2UtaW5zZW5zaXRpdmUuIEFsbG93ZWQgdmFsdWVzOiAlcyIgJSAiLCAiLmpvaW4oYWxsb3dl
ZF9wbGF0Zm9ybV9uYW1lcykpCiAgICAgb3B0aW9ucyA9IE5vbmUKIAogICAgIGFyZ19vcHRpb25z
LCBhcmdfdmFsdWVzID0gY2xpX3BhcnNlci5wYXJzZV9hcmdzKCkKQEAgLTI0OSw2ICsyNTUsNyBA
QCBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgICAgICAnb3V0cHV0X2RpcnBhdGgnOiBh
cmdfb3B0aW9ucy5vdXRwdXREaXIsCiAgICAgICAgICdjb25jYXRlbmF0ZV9vdXRwdXQnOiBhcmdf
b3B0aW9ucy50ZXN0LAogICAgICAgICAnZnJhbWV3b3JrX25hbWUnOiBhcmdfb3B0aW9ucy5mcmFt
ZXdvcmssCisgICAgICAgICdwbGF0Zm9ybV9uYW1lJzogYXJnX29wdGlvbnMucGxhdGZvcm0sCiAg
ICAgICAgICdmb3JjZV9vdXRwdXQnOiBhcmdfb3B0aW9ucy5mb3JjZSwKICAgICAgICAgJ2dlbmVy
YXRlX2JhY2tlbmQnOiBnZW5lcmF0ZV9iYWNrZW5kLAogICAgICAgICAnZ2VuZXJhdGVfZnJvbnRl
bmQnOiBnZW5lcmF0ZV9mcm9udGVuZCwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297637</attachid>
            <date>2016-12-21 17:20:26 -0800</date>
            <delta_ts>2016-12-21 17:24:53 -0800</delta_ts>
            <desc>[PATCH 2/3] Move test cases into platform-specific directories</desc>
            <filename>bug-166003-20161221171922.patch</filename>
            <type>text/plain</type>
            <size>1582301</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwMDkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
ZTRmYjEwNDJjMzAwMjc4YzM3ZmI3OTEzYzI3NTIzMTMyMGVmYzI0Li4xMTlmYmE5ZTUyMjEwNTcy
ZTc2YjZiMzYwNTA1NGQyMzBiZDI5NTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NiBAQAorMjAxNi0xMi0yMSAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiB0ZWFjaCB0aGUgcHJvdG9jb2wgZ2VuZXJhdG9yIGFib3V0
IHBsYXRmb3JtLXNwZWNpZmljIHR5cGVzLCBldmVudHMsIGFuZCBjb21tYW5kcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDAzCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8yODcxODk5MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNYWtlIGl0IHBvc3NpYmxlIHRvIHRlc3QgaW5zcGVjdG9yIHByb3Rv
Y29sIGdlbmVyYXRvciBvdXRwdXQgZm9yIGRpZmZlcmVudCBwbGF0Zm9ybXMuCisKKyAgICAgICAg
TW92ZSBleGlzdGluZyB0ZXN0cyB0byB0aGUgZ2VuZXJpYy8gc3ViZGlyZWN0b3J5LCBhcyB0aGV5
IGFyZSB0byBiZSBnZW5lcmF0ZWQKKyAgICAgICAgd2l0aG91dCBhbnkgc3BlY2lmaWMgcGxhdGZv
cm0uIExhdGVyLCBwbGF0Zm9ybS1zcGVjaWZpYyBnZW5lcmF0b3IgYmVoYXZpb3Igd2lsbCBiZQor
ICAgICAgICB0ZXN0ZWQgYnkgY2xvbmluZyB0aGUgc2FtZSB0ZXN0IHRvIG11bHRpcGxlIHBsYXRm
b3JtIGRpcmVjdG9yaWVzLgorCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9
PiAvZ2VuZXJpYy99Y29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWNvbW1hbmRzLXdpdGgtb3B0
aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJp
Yy99ZW51bS12YWx1ZXMuanNvbgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8g
PT4gL2dlbmVyaWMvfWV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2NvbW1h
bmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRp
b25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdAorICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0
ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdAorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2ZhaWwtb24t
ZG9tYWluLWF2YWlsYWJpbGl0eS5qc29uLWVycm9yCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFu
ZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29t
bWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0
ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5
cGUtZGVjbGFyYXRpb25zLmpzb24tZXJyb3IKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJl
ci1uYW1lcy5qc29uLWVycm9yCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9
PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJy
b3IKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBl
Y3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVy
cm9yCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhw
ZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJv
cgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVj
dGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJy
b3IKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBl
Y3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9y
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0
ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tZXJy
b3IKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBl
Y3RlZC9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24tZXJyb3IK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3Rl
ZC9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yCisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvZmFpbC1vbi11
bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvcgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2Zh
aWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yCisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQv
Z2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvc2FtZS10
eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10
eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
c3svID0+IC9nZW5lcmljL31leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0
aXZlLXR5cGUuanNvbi1yZXN1bHQKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3sv
ID0+IC9nZW5lcmljL31leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1y
ZXN1bHQKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdAorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1l
LWNhc3RzLmpzb24tcmVzdWx0CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9
PiAvZ2VuZXJpYy99ZmFpbC1vbi1kb21haW4tYXZhaWxhYmlsaXR5Lmpzb24KKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31mYWlsLW9uLWR1cGxpY2F0ZS1j
b21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVy
bi1wYXJhbWV0ZXItbmFtZXMuanNvbgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
ey8gPT4gL2dlbmVyaWMvfWZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5q
c29uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZmFp
bC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVt
YmVyLW5hbWVzLmpzb24KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9n
ZW5lcmljL31mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWZhaWwtb24tbnVtYmVyLXR5cGVkLW9w
dGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0c3svID0+IC9nZW5lcmljL31mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1l
bWJlci5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJp
Yy99ZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWZhaWwtb24tc3Ry
aW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNp
bmctdHlwZS1yZWZlcmVuY2UuanNvbgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
ey8gPT4gL2dlbmVyaWMvfWZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUu
anNvbgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWZh
aWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24KKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVu
Y2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHN7LyA9PiAvZ2VuZXJpYy99ZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5
cGUtbWVtYmVyLmpzb24KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9n
ZW5lcmljL31nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfXNhbWUtdHlwZS1pZC1k
aWZmZXJlbnQtZG9tYWluLmpzb24KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3sv
ID0+IC9nZW5lcmljL31zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfXR5cGUtZGVjbGFyYXRp
b24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99dHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24K
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL310eXBlLWRl
Y2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHN7LyA9PiAvZ2VuZXJpYy99dHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99dHlwZS1yZXF1aXJp
bmctcnVudGltZS1jYXN0cy5qc29uCisKIDIwMTYtMTItMTcgIEJyaWFuIEJ1cmcgIDxiYnVyZ0Bh
cHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogdGVhY2ggdGhlIHByb3RvY29sIGdl
bmVyYXRvciBhYm91dCBwbGF0Zm9ybS1zcGVjaWZpYyB0eXBlcywgZXZlbnRzLCBhbmQgY29tbWFu
ZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmli
dXRlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMjYyZTg4OWZhNWJkMGI0
YWU1N2U1ZjdmMWJhYzZjZmYzZmU5MzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKysrIC9kZXYvbnVsbApAQCAt
MSwxMDkgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJ0eXBlcyI6
IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAotICAgICAgICAg
ICAgInR5cGUiOiAiaW50ZWdlciIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVl
IGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAgfSwKLSAgICAgICAgewot
ICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAotICAgICAgICAgICAgInR5cGUiOiAi
c3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdCi0g
ICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJDb2xvckxpc3QiLAotICAg
ICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6
ICJQcmltYXJ5Q29sb3JzIiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJp
ZCI6ICJFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCi0gICAgICAgICAgICAicHJvcGVydGll
cyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJp
bmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJv
ciBjb2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXSwKLSAgICAiY29tbWFu
ZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiB9Ci0g
ICAgICAgICAgICBdLAotICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1
ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5
cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3Ii
LCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25h
bCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIs
ICIkcmVmIjogIkNvbG9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lh
biIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KLSAg
ICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAi
ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLAotICAgICAgICAgICAgImFzeW5j
IjogdHJ1ZSwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICAgICAg
XSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
Y29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6
IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3Rl
cyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRy
dWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVj
dCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxv
YWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6
IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAi
RXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJz
Y3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJD
b2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50
YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBd
Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxT
eW5jIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICAgICAgXSwK
LSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29s
dW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJl
ciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVj
dCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnki
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0
YWJhc2VJZCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYi
OiAiRXJyb3IiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMi
LCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3Jl
ZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAi
bWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0s
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxBc3luYyIsCi0gICAg
ICAgICAgICAiYXN5bmMiOiB0cnVlLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiB9
Ci0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAi
dHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwg
InR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1w
IiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVz
IiwgInR5cGUiOiAib2JqZWN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9h
ZCIsICJ0eXBlIjogImFueSIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNl
SWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
c3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KLSAgICAgICAg
ICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwt
cmV0dXJuLXBhcmFtZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYxZDU3ZDgyMGRlOTE2YTcz
Y2JkZDk4MzgzZDEyNjQyMDM5OGY0YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKysr
IC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIs
Ci0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJ
ZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKLSAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgotICAgICAgICB9
LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCi0gICAgICAg
ICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBbInJlZCIsICJncmVl
biIsICJibHVlIl0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkNv
bG9yTGlzdCIsCi0gICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAiaXRl
bXMiOiB7ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0KLSAgICAgICAgfSwKLSAgICAgICAgewot
ICAgICAgICAgICAgImlkIjogIkVycm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIs
Ci0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKLSAgICAgICAg
ICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIs
ICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2Ny
aXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBd
LAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXki
LCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9u
YWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlw
ZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFs
IjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVm
IjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5
Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
YWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmlu
ZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRp
b25hbCI6IHRydWUgfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIs
ICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25h
bCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBl
IjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwi
OiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYi
OiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlD
b2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJh
bHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5n
IiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlv
bmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJuYW1lIjogImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsCi0gICAgICAgICAg
ICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVz
IiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQi
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9y
IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQ
cmltYXJ5Q29sb3JzIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29s
b3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEi
LCAieWVsbG93IiwgImJsYWNrIl0gfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1
cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6
ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xv
cnMiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJl
ZiI6ICJDb2xvckxpc3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9y
IiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ci
LCAiYmxhY2siXSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWlu
cy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6
ZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRhOGVjYjE3NmQzYjhlYzli
Zjk2Njc2ZTYzY2VhMDUxNDY2Yjg2OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisrKyAvZGV2L251bGwK
QEAgLTEsNTQgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiTmV0d29yazEiLAotICAgICJj
b21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNl
MSIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUg
Y29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9y
aWdpbiBjaGVja3MuIgotICAgICAgICB9Ci0gICAgXQotfSwKLXsKLSAgICAiZG9tYWluIjogIk5l
dHdvcmsyIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJM
b2FkZXJJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIlVuaXF1ZSBsb2FkZXIgaWRlbnRpZmllci4iCi0gICAgICAgIH0KLSAgICBd
Ci19LAotewotICAgICJkb21haW4iOiAiTmV0d29yazMiLAotICAgICJjb21tYW5kcyI6IFsKLSAg
ICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMSIsCi0gICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZy
YW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgot
ICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2Uy
IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBj
b250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3Jp
Z2luIGNoZWNrcy4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjog
ImxvYWRSZXNvdXJjZTMiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVz
b3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0
aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAg
ICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNw
ZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9LAotICAg
ICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U1IiwKLSAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJh
bWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0g
ICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTYi
LAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNv
bnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmln
aW4gY2hlY2tzLiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAi
bG9hZFJlc291cmNlNyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNv
dXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRo
b3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0t
dmFsdWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZW51bS12YWx1ZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RhZDYx
ZGY3YzlmOWM3NmU2OTI4OTdjM2RmZTBiMDgyM2Y5MGU0ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDM1ICsw
LDAgQEAKLXsiZG9tYWlucyI6WwotewotICAgICJkb21haW4iOiAiVHlwZURvbWFpbiIsCi0gICAg
InR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiVHlwZURvbWFpbkVudW0i
LAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJz
aGFyZWQiLCAicmVkIiwgImdyZWVuIiwgImJsdWUiXQotICAgICAgICB9Ci0gICAgXQotfSwKLXsK
LSAgICAiZG9tYWluIjogIkNvbW1hbmREb21haW4iLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAg
ICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiLAot
ICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmV0dXJuVmFsdWUiLCAidHlwZSI6ICJzdHJpbmci
LCAiZW51bSI6IFsic2hhcmVkIiwgImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciXSB9Ci0gICAg
ICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19LAotewotICAgICJkb21haW4iOiAiRXZlbnRE
b21haW4iLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjog
ImV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXJhbWV0ZXIiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZW51bSI6IFsic2hhcmVkIiwgImJsYWNrIiwgIndoaXRlIl0gfQotICAgICAgICAgICAgXQotICAg
ICAgICB9Ci0gICAgXQotfQotXX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZlbnRz
LXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjYWJiZjEwYjgzNmY5ZmY3Y2Q5OTI1ZGI0ZDZiNDFjNWRmYTg3YjQ4Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJz
Lmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJE
YXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAi
RGF0YWJhc2VJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCi0g
ICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwK
LSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAidmFsdWVzIjogWyJy
ZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJpZCI6ICJDb2xvckxpc3QiLAotICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAgICAg
ICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9Ci0gICAgICAgIH0sCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6
ICJvYmplY3QiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIs
Ci0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
Im1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2Fn
ZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdl
ciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAg
ICB9Ci0gICAgXSwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFt
ZSI6ICJkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwKLSAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6
ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIs
ICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFt
cCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIs
ICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwg
IiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJ2YWx1ZXMiOiBbImN5
YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0g
ICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjog
ImRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVy
cyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAi
YXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9y
TGlzdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6
ICJzdHJpbmciLCAidmFsdWVzIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNr
Il0gfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1h
bmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMt
YXR0cmlidXRlLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDVj
NDRjNWI5MGUwNTQxZGU2MTJjMzFlZjRhNDJlZjg2ODVlYzQ1Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5q
c29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDE3NTQgKzAsMCBAQAotIyMjIEJlZ2luIEZp
bGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRGF0YWJhc2UuCi1JbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRGF0YWJhc2VEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRGF0YWJhc2UiKTsK
LUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5QcmltYXJ5Q29sb3JzIiwg
e1JlZDogInJlZCIsIEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKLUluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzIiwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwgIm9w
dGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0
aW9uYWwiOiBmYWxzZX1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2
YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9y
IiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOwotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzIiwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFs
IjogZmFsc2V9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwi
OiBmYWxzZX1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMi
LCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFs
dGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jIiwgW3sibmFtZSI6ICJkYXRhYmFzZUlk
IiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAicXVlcnki
LCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbImNvbHVtbk5hbWVzIiwg
Im5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwg
InNxbEVycm9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJzY3JlZW5Db2xvciIsICJwcmludENvbG9y
Il0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVT
UUxBc3luYyIsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRp
b25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlv
bmFsIjogZmFsc2V9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFs
dWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIs
ICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0
aXZhdGVEb21haW4oIkRhdGFiYXNlIik7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1h
c3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZv
aWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3Bh
dGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAg
ICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRl
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBp
bl9xdWVyeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlcyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYg
aW5fcXVlcnkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxs
SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5n
OwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBB
bHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdw
cmludENvbG9yJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlcy4KLSAgICBlbnVtIGNsYXNzIFByaW50Q29sb3IgewotICAgICAg
ICBDeWFuID0gMywKLSAgICAgICAgTWFnZW50YSA9IDQsCi0gICAgICAgIFllbGxvdyA9IDUsCi0g
ICAgICAgIEJsYWNrID0gNiwKLSAgICB9OyAvLyBlbnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2
aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhFcnJvclN0cmlu
ZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBvcHRfb3V0X25vdGVzLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiogb3B0X291dF90aW1lc3RhbXAsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4q
IG9wdF9vdXRfdmFsdWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZT4qIG9wdF9vdXRfcGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6
T3B0T3V0cHV0PGludD4qIG9wdF9vdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0
ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xv
ciogb3B0X291dF9wcmludENvbG9yKSA9IDA7Ci0gICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayA6IHB1YmxpYyBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2Fs
bGJhY2tCYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmLCBpbnQgaWQpOwot
ICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8
U3RyaW5nPiogbm90ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+KiB0
aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4qIHZhbHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBwYXlsb2FkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRP
dXRwdXQ8aW50PiogZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0
cmluZz4qIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91
dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKTsKLSAgICB9OwotICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4mJiBjYWxsYmFjaykgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBleGVjdXRlU1FMU3luYyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5n
Pj4mIG91dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVz
dGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIG91dF92YWx1ZXMsIEluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWUqIG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRlcm5h
dGVDb2xvcnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBv
dXRfc2NyZWVuQ29sb3IsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENv
bG9yKiBvdXRfcHJpbnRDb2xvcikgPSAwOwotICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY0NhbGxi
YWNrIDogcHVibGljIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVy
PiYmLCBpbnQgaWQpOwotICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5v
dGVzLCBkb3VibGUgdGltZXN0YW1wLCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCB2YWx1ZXMs
IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIGNvbnN0
IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9y
KTsKLSAgICB9OwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMoRXJyb3JTdHJpbmcm
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVT
UUxBc3luY0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVh
bCB+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKLXBy
aXZhdGU6Ci0gICAgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZv
aWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBleGVjdXRlU1FM
U3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJz
KTsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIo
QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikg
eyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRl
OgotICAgIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2Vu
dCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1
ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5EYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8RGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcj4gRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNw
YXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLURhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIm
IGJhY2tlbmREaXNwYXRjaGVyLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdl
bnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hl
cikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVn
aXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgdGhpcyk7
Ci19Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1
ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3Nh
Z2UpCi17Ci0gICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMp
OwotCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdl
LT5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7Ci0KLSAgICBp
ZiAobWV0aG9kID09ICJleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikKLSAgICAg
ICAgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIFdURk1vdmUo
cGFyYW1ldGVycykpOwotICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMiKQotICAgICAgICBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UgaWYgKG1l
dGhvZCA9PSAiZXhlY3V0ZVNRTFN5bmMiKQotICAgICAgICBleGVjdXRlU1FMU3luYyhyZXF1ZXN0
SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0
ZVNRTEFzeW5jIikKLSAgICAgICAgZXhlY3V0ZVNRTEFzeW5jKHJlcXVlc3RJZCwgV1RGTW92ZShw
YXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0
cmluZygnXCcnLCAiRGF0YWJhc2UiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsK
LX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYm
IHBhcmFtZXRlcnMpCi17Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRj
aGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJ
ZCIpLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxs
cHRyKTsKLSAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkg
ewotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVu
dHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVT
UUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9h
bHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQs
IGluX3F1ZXJ5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JT
dHJpbmcgZXJyb3I7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91
dHB1dDxTdHJpbmc+IG91dF9ub3RlczsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRw
dXQ8ZG91YmxlPiBvdXRfdGltZXN0YW1wOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91
dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gb3V0X3ZhbHVlczsKLSAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gb3V0X3Bh
eWxvYWQ7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpEYXRhYmFzZUlkPiBvdXRfZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNv
bG9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0
PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxT
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBv
dXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAm
b3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0X3NjcmVlbkNv
bG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCAmb3V0X3ByaW50Q29sb3IpOwotCi0gICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkgewotICAgICAgICBpZiAob3V0X2NvbHVtbk5hbWVzKQotICAgICAgICAg
ICAgcmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG91dF9jb2x1
bW5OYW1lcyk7Ci0gICAgICAgIGlmIChvdXRfbm90ZXMuaXNBc3NpZ25lZCgpKQotICAgICAgICAg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBvdXRfbm90ZXMuZ2V0
VmFsdWUoKSk7Ci0gICAgICAgIGlmIChvdXRfdGltZXN0YW1wLmlzQXNzaWduZWQoKSkKLSAgICAg
ICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIG91dF90
aW1lc3RhbXAuZ2V0VmFsdWUoKSk7Ci0gICAgICAgIGlmIChvdXRfdmFsdWVzLmlzQXNzaWduZWQo
KSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiks
IG91dF92YWx1ZXMuZ2V0VmFsdWUoKSk7Ci0gICAgICAgIGlmIChvdXRfcGF5bG9hZC5pc0Fzc2ln
bmVkKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9h
ZCIpLCBvdXRfcGF5bG9hZC5nZXRWYWx1ZSgpKTsKLSAgICAgICAgaWYgKG91dF9kYXRhYmFzZUlk
LmlzQXNzaWduZWQoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVy
YWwoImRhdGFiYXNlSWQiKSwgb3V0X2RhdGFiYXNlSWQuZ2V0VmFsdWUoKSk7Ci0gICAgICAgIGlm
IChvdXRfc3FsRXJyb3IpCi0gICAgICAgICAgICByZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVy
YWwoInNxbEVycm9yIiksIG91dF9zcWxFcnJvcik7Ci0gICAgICAgIGlmIChvdXRfc2NyZWVuQ29s
b3IuaXNBc3NpZ25lZCgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJzY3JlZW5Db2xvciIpLCBvdXRfc2NyZWVuQ29sb3IuZ2V0VmFsdWUoKSk7Ci0gICAgICAg
IGlmIChvdXRfYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRBcnJheShB
U0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBvdXRfYWx0ZXJuYXRlQ29sb3JzKTsKLSAg
ICAgICAgaWYgKG91dF9wcmludENvbG9yLmlzQXNzaWduZWQoKSkKLSAgICAgICAgICAgIHJlc3Vs
dC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBvdXRfcHJpbnRDb2xvci5n
ZXRWYWx1ZSgpKTsKLSAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19
Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlc0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwg
aW50IGlkKSA6IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5k
RGlzcGF0Y2hlciksIGlkKSB7IH0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6c2VuZFN1
Y2Nlc3MoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYgY29sdW1u
TmFtZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBub3RlcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4qIHRpbWVzdGFtcCwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogdmFsdWVz
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZT4qIHBheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBkYXRhYmFz
ZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVy
cm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29sb3Is
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVy
bmF0ZUNvbG9ycywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHByaW50
Q29sb3IpCi17Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAganNvbk1l
c3NhZ2UtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMp
OwotICAgIGlmIChub3Rlcy5pc0Fzc2lnbmVkKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBub3Rlcy5nZXRWYWx1ZSgpKTsKLSAgICBpZiAo
dGltZXN0YW1wLmlzQXNzaWduZWQoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldERvdWJsZShB
U0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXAuZ2V0VmFsdWUoKSk7Ci0gICAgaWYg
KHZhbHVlcy5pc0Fzc2lnbmVkKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWVzLmdldFZhbHVlKCkpOwotICAgIGlmIChwYXlsb2Fk
LmlzQXNzaWduZWQoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKEFTQ0lJTGl0ZXJh
bCgicGF5bG9hZCIpLCBwYXlsb2FkLmdldFZhbHVlKCkpOwotICAgIGlmIChkYXRhYmFzZUlkLmlz
QXNzaWduZWQoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldEludGVnZXIoQVNDSUlMaXRlcmFs
KCJkYXRhYmFzZUlkIiksIGRhdGFiYXNlSWQuZ2V0VmFsdWUoKSk7Ci0gICAgaWYgKHNxbEVycm9y
KQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3Ii
KSwgc3FsRXJyb3IpOwotICAgIGlmIChzY3JlZW5Db2xvci5pc0Fzc2lnbmVkKCkpCi0gICAgICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBzY3Jl
ZW5Db2xvci5nZXRWYWx1ZSgpKTsKLSAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICBq
c29uTWVzc2FnZS0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgYWx0
ZXJuYXRlQ29sb3JzKTsKLSAgICBpZiAocHJpbnRDb2xvci5pc0Fzc2lnbmVkKCkpCi0gICAgICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIHByaW50
Q29sb3IuZ2V0VmFsdWUoKSk7Ci0gICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhXVEZNb3Zl
KGpzb25NZXNzYWdlKSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycykKLXsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlM
aXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVy
YWwoInF1ZXJ5IiksIG51bGxwdHIpOwotICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQ
cm90b2NvbEVycm9ycygpKSB7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIFN0cmluZzo6Zm9y
bWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAi
RGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVz
dElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmPERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c0NhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2so
bV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOwotICAgIG1fYWdlbnQt
PmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGVycm9yLCBpbl9kYXRhYmFzZUlk
LCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsKLQotICAgIGlmIChlcnJvci5sZW5ndGgo
KSkgewotICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOwotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpCi17Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0
ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFs
KCJxdWVyeSIpLCBudWxscHRyKTsKLSAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJv
dG9jb2xFcnJvcnMoKSkgewotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBTdHJpbmc6OmZvcm1h
dCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRh
dGFiYXNlLmV4ZWN1dGVTUUxTeW5jIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVT
UUxTeW5jKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7
Ci0gICAgU3RyaW5nIG91dF9ub3RlczsKLSAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKLSAgICBJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCBvdXRfdmFsdWVzOwotICAgIEluc3BlY3Rvcjo6SW5z
cGVjdG9yVmFsdWUgb3V0X3BheWxvYWQ7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkRhdGFiYXNlSWQgb3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOwot
ICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3Jl
ZW5Db2xvcjsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xv
ciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVjdXRlU1FMU3luYyhlcnJvciwgaW5f
ZGF0YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90
aW1lc3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRf
c3FsRXJyb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsICZvdXRfc2NyZWVuQ29sb3IsICZvdXRfcHJp
bnRDb2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIHJlc3VsdC0+
c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBvdXRfY29sdW1uTmFtZXMpOwot
ICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG91dF9ub3Rl
cyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiks
IG91dF90aW1lc3RhbXApOwotICAgICAgICByZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwo
InZhbHVlcyIpLCBvdXRfdmFsdWVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxp
dGVyYWwoInBheWxvYWQiKSwgb3V0X3BheWxvYWQpOwotICAgICAgICByZXN1bHQtPnNldEludGVn
ZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG91dF9kYXRhYmFzZUlkKTsKLSAgICAgICAg
cmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBvdXRfc3FsRXJyb3Ip
OwotICAgICAgICByZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3Jz
IiksIG91dF9hbHRlcm5hdGVDb2xvcnMpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJz
OjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRDb2xvcikpOwot
ICAgIH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCkpOwotICAgIGVsc2UK
LSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVjdXRl
U1FMQXN5bmNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNo
ZXIsIGludCBpZCkgOiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURk1vdmUoYmFj
a2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Qg
dmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlk
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9y
LCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJp
bnRDb2xvcikKLXsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldEFycmF5KEFTQ0lJTGl0
ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOwotICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7Ci0gICAganNvbk1lc3NhZ2UtPnNl
dERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOwotICAgIGpzb25N
ZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWVzKTsKLSAgICBq
c29uTWVzc2FnZS0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHBheWxvYWQpOwot
ICAgIGpzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBk
YXRhYmFzZUlkKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3Fs
RXJyb3IiKSwgc3FsRXJyb3IpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJzY3JlZW5Db2xvciIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0
RW51bUNvbnN0YW50VmFsdWUoc2NyZWVuQ29sb3IpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0QXJy
YXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgYWx0ZXJuYXRlQ29sb3JzKTsKLSAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUocHJpbnRD
b2xvcikpOwotICAgIENhbGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2Fn
ZSkpOwotfQotCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3lu
Yyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKQot
ewotICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdl
cihwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0cik7
Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBh
cmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0cik7Ci0gICAgaWYg
KG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
SW52YWxpZFBhcmFtcywgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAn
JXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMiKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jKHJlcXVlc3RJZCwgaW5fZGF0YWJh
c2VJZCwgaW5fcXVlcnkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBF
cnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5l
dyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJh
Y2sobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOwotICAgIG1fYWdl
bnQtPmV4ZWN1dGVTUUxBc3luYyhlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxi
YWNrLmNvcHlSZWYoKSk7Ci0KLSAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgY2Fs
bGJhY2stPmRpc2FibGUoKTsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMj
IyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIkluc3BlY3RvckZyb250
ZW5kUm91dGVyLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
clByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLS8vIEZvcndhcmQg
ZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLWNsYXNzIEVycm9yOwotZW51bSBj
bGFzcyBQcmltYXJ5Q29sb3JzOwotfSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIGZvcndhcmQgZGVj
bGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLS8qIFVu
aXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KLXR5cGVkZWYgaW50IERhdGFi
YXNlSWQ7Ci10eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBDb2xvckxpc3Q7Ci19IC8vIERhdGFiYXNl
Ci0vLyBFbmQgb2YgdHlwZWRlZnMuCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmlu
ZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4g
Z2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotbmFtZXNwYWNlIERhdGFiYXNlIHsKLS8qICAq
LwotZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzIHsKLSAgICBSZWQgPSAwLAotICAgIEdyZWVuID0g
MSwKLSAgICBCbHVlID0gMiwKLX07IC8vIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycwotLyogRGF0
YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9
IDAsCi0gICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCi0gICAgICAgIENvZGVTZXQgPSAxIDw8
IDEsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKLSAgICB9
OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHBy
aXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAg
ICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVy
PFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVm
PC8qRXJyb3IqL0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVz
dWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOwotICAgIHB1YmxpYzoK
LQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXNzYWdlIiksIHZhbHVl
KTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKLSAgICAgICAg
fQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0
KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
SW50ZWdlcihBU0NJSUxpdGVyYWwoImNvZGUiKSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxDb2RlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPEVycm9yPiBy
ZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9j
YXN0KTsKLQotICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1
bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVy
cHJldF9jYXN0PFJlZjxFcnJvcj4qPigmcmVzdWx0KSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0g
ICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPEVycm9yPiBy
ZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQotICAg
ICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0g
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0g
ICAgfQotfTsKLQotfSAvLyBEYXRhYmFzZQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLXN0ZDo6b3B0aW9uYWw8UHJv
dG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwot
Ci0vLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0ZDo6b3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycz4oY29uc3QgU3RyaW5nJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0K
LX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNl
IFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNo
YXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Ci0gICAgInJlZCIsCi0gICAgImdy
ZWVuIiwKLSAgICAiYmx1ZSIsCi0gICAgImN5YW4iLAotICAgICJtYWdlbnRhIiwKLSAgICAieWVs
bG93IiwKLSAgICAiYmxhY2siLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGlu
dCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0v
LyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0ZDo6b3B0aW9u
YWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNv
bG9ycz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKLSAgICAgICAgKHNpemVfdClJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4sCi0gICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6
OkJsdWUsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAg
ICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFs
dWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi19IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI7Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXIgewotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyKGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2Rl
bGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJ
ZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGV4
ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBpbl9xdWVyeSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3lu
Yyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVl
cnkpIG92ZXJyaWRlOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRGF0
YWJhc2VEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0
Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQot
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2Nv
bERhdGFiYXNlRG9tYWluSGFuZGxlcj4gX2RhdGFiYXNlSGFuZGxlcjsKLX0KLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Kiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250
cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFs
bG9jCi17Ci0gICAgW19kYXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxs
b2NdOwotfQotCi0tICh2b2lkKXNldERhdGFiYXNlSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRGF0
YWJhc2VEb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2RhdGFi
YXNlSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW19kYXRhYmFzZUhhbmRsZXIgcmVs
ZWFzZV07Ci0gICAgX2RhdGFiYXNlSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBh
dXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iakNJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFn
ZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPj4o
QVNDSUlMaXRlcmFsKCJEYXRhYmFzZSIpLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRl
RGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUo
YWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5I
YW5kbGVyPilkYXRhYmFzZUhhbmRsZXIKLXsKLSAgICByZXR1cm4gX2RhdGFiYXNlSGFuZGxlcjsK
LX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDog
TlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREYXRhYmFz
ZUhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGRhdGFiYXNl
SGFuZGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1h
dHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JWYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0lu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJp
bmcmIGluX3F1ZXJ5KQotewotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJv
cikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAg
IGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFt
ZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0
YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKLSAgICAgICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNv
bHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwot
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9h
ZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0
ZUNvbG9ycyIpOwotICAgICAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1bHRP
YmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgaW5zcGVjdG9yU3Ry
aW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIGlmIChub3RlcykKLSAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgKm5vdGVzKTsK
LSAgICAgICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91
YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksICp0aW1lc3RhbXApOwotICAgICAgICBpZiAo
dmFsdWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJ2YWx1ZXMiKSwgWyp2YWx1ZXMgdG9JbnNwZWN0b3JPYmplY3RdKTsKLSAgICAgICAgaWYgKHBh
eWxvYWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgi
cGF5bG9hZCIpLCBbKnBheWxvYWQgdG9JbnNwZWN0b3JPYmplY3RdKTsKLSAgICAgICAgaWYgKGRh
dGFiYXNlSWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoQVNDSUlMaXRl
cmFsKCJkYXRhYmFzZUlkIiksICpkYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKHNxbEVycm9yKQot
ICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJv
ciIpLCBbKnNxbEVycm9yIHRvSW5zcGVjdG9yT2JqZWN0XSk7Ci0gICAgICAgIGlmIChzY3JlZW5D
b2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
c2NyZWVuQ29sb3IiKSwgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsKLSAgICAgICAg
aWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXko
QVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoKmFs
dGVybmF0ZUNvbG9ycykpOwotICAgICAgICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCB0b1Byb3Rv
Y29sU3RyaW5nKCpwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSk7Ci0gICAgfTsKLQot
ICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwotICAgIE5TU3RyaW5nICpv
X2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KLSAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNz
Q2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5
Om9faW5fcXVlcnldOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJ
ZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCi17Ci0gICAgaWQg
ZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91
YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAq
c2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50
Q29sb3IgKnByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVz
Iik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihu
b3RlcywgQCJub3RlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05B
TF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJz
cWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJB
TUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICBpZiAo
Y29sdW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0
ZXJhbCgiY29sdW1uTmFtZXMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7
Ci0gICAgICAgIGlmIChub3RlcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgKm5vdGVzKTsKLSAgICAgICAgaWYgKHRpbWVzdGFtcCkK
LSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0
YW1wIiksICp0aW1lc3RhbXApOwotICAgICAgICBpZiAodmFsdWVzKQotICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgWyp2YWx1ZXMgdG9J
bnNwZWN0b3JPYmplY3RdKTsKLSAgICAgICAgaWYgKHBheWxvYWQpCi0gICAgICAgICAgICByZXN1
bHRPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBbKnBheWxvYWQgdG9J
bnNwZWN0b3JPYmplY3RdKTsKLSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksICpkYXRh
YmFzZUlkKTsKLSAgICAgICAgaWYgKHNxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBbKnNxbEVycm9yIHRvSW5zcGVj
dG9yT2JqZWN0XSk7Ci0gICAgICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgdG9Qcm90b2Nv
bFN0cmluZygqc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVD
b2xvcnMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOwotICAgICAg
ICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFT
Q0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocmVzdWx0T2JqZWN0KSk7Ci0gICAgfTsKLQotICAgIGludCBvX2luX2RhdGFiYXNlSWQg
PSBpbl9kYXRhYmFzZUlkOwotICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0K
LSAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhF
cnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
ayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKLX0KLQotdm9p
ZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMo
bG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5
KQotewotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3ND
YWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcg
Km5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJu
YXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3Is
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIHByaW50Q29sb3Ip
IHsKLSAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
QVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIp
OwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2Fk
LCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJB
TUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIp
OwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFt
ZXMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7Ci0gICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHRpbWVz
dGFtcCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFs
dWVzIiksIFt2YWx1ZXMgdG9JbnNwZWN0b3JPYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgW3BheWxvYWQgdG9JbnNwZWN0b3JP
YmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgi
ZGF0YWJhc2VJZCIpLCBkYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmpl
Y3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBbc3FsRXJyb3IgdG9JbnNwZWN0b3JPYmplY3Rd
KTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImFsdGVybmF0
ZUNvbG9ycyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCB0
b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCB0b1Byb3RvY29sU3RyaW5nKHByaW50
Q29sb3IpKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpKTsKLSAgICB9OwotCi0gICAgaW50IG9faW5fZGF0
YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7Ci0gICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9x
dWVyeTsKLQotICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6
ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6
b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOwotfQotCi12b2lkIE9iakNJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0
SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQotewotICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4o
TlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3Vi
bGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5D
b2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciBwcmludENvbG9yKSB7Ci0gICAgICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNv
bHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2Fk
Iik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVy
cm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGluc3Bl
Y3RvclN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbm90ZXMpOwotICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOwotICAg
ICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBbdmFs
dWVzIHRvSW5zcGVjdG9yT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUo
QVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIFtwYXlsb2FkIHRvSW5zcGVjdG9yT2JqZWN0XSk7Ci0g
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQi
KSwgZGF0YWJhc2VJZCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0
ZXJhbCgic3FsRXJyb3IiKSwgW3NxbEVycm9yIHRvSW5zcGVjdG9yT2JqZWN0XSk7Ci0gICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgdG9Q
cm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFy
cmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIGluc3BlY3RvclN0cmluZ0FycmF5
KGFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoInByaW50Q29sb3IiKSwgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1v
dmUocmVzdWx0T2JqZWN0KSk7Ci0gICAgfTsKLQotICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBp
bl9kYXRhYmFzZUlkOwotICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KLSAg
ICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFi
YXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBj
b21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgot
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotQGNs
YXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I7Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzKSB7Ci0gICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9yc0dyZWVuLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0Js
dWUsCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yKSB7Ci0gICAgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRD
b2xvckN5YW4sCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdywKLSAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmlu
dENvbG9yQmxhY2ssCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcikg
ewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNQcmludENvbG9yQ3lhbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZ
ZWxsb3csCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1ByaW50Q29sb3JCbGFjaywKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVn
ZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yKSB7Ci0gICAg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JDeWFuLAotICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yTWFnZW50YSwKLSAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvclllbGxvdywKLSAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNrLAotfTsKLQot
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNQcmludENvbG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5
bmNQcmludENvbG9yQ3lhbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3lu
Y1ByaW50Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFz
eW5jUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY1ByaW50Q29sb3JCbGFjaywKLX07Ci0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQ
cm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGlj
dGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQp
Y29kZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmlu
ZyAqbWVzc2FnZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24p
IGludCBjb2RlOwotQGVuZAotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5I
YW5kbGVyIDxOU09iamVjdD4KLUByZXF1aXJlZAotLSAodm9pZClleGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9y
KSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoq
cGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3Fs
RXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xv
cikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0
cmluZyAqKXF1ZXJ5OwotLSAodm9pZClleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1u
TmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAq
ZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2Fs
bGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7
Ci0tICh2b2lkKWV4ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJp
bmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1l
c3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpz
cWxFcnJvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRh
dGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OwotLSAodm9p
ZClleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJy
b3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5
bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9y
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNl
SWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OwotQGVuZAotCi0KLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVy
bmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRy
aWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5n
KFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyB2YWx1ZSkKLXsKLSAgICBzd2l0Y2go
dmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDoK
LSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgicmVkIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJh
bCgiZ3JlZW4iKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0Js
dWU6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImJsdWUiKTsKLSAgICB9Ci19Ci0KLXRl
bXBsYXRlPD4KLWlubGluZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJy
ZWQiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVk
OwotICAgIGlmICh2YWx1ZSA9PSAiZ3JlZW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW47Ci0gICAgaWYgKHZhbHVlID09ICJibHVlIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU7Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9yc1JlZDsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29s
b3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjoK
LSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiY3lhbiIpOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1h
Z2VudGE6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIm1hZ2VudGEiKTsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1By
aW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInllbGxvdyIpOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJibGFj
ayIpOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJjeWFuIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxv
dyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxh
Y2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3Rv
Y29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNQcmludENvbG9yIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c1ByaW50Q29sb3JDeWFuOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJjeWFuIik7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvck1hZ2VudGE6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIm1h
Z2VudGEiKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93OgotICAgICAgICByZXR1cm4gQVNDSUlM
aXRlcmFsKCJ5ZWxsb3ciKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJldHVy
biBBU0NJSUxpdGVyYWwoImJsYWNrIik7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1By
aW50Q29sb3IgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAg
aWYgKHZhbHVlID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjsKLSAgICBp
ZiAodmFsdWUgPT0gIm1hZ2VudGEiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOwot
ICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93
OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFj
azsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOwot
fQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMU3luY1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckN5YW46
Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImN5YW4iKTsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yTWFnZW50YToKLSAgICAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgibWFnZW50YSIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVybiBBU0NJSUxp
dGVyYWwoInllbGxvdyIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY1ByaW50Q29sb3JCbGFjazoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYmxhY2si
KTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImN5YW4iKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1
ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxTeW5jUHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29s
b3JZZWxsb3c7Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNrOwotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxTeW5jUHJpbnRDb2xvckN5YW47Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmlu
ZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IgdmFsdWUpCi17
Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY1ByaW50Q29sb3JDeWFuOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJj
eWFuIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50
Q29sb3JNYWdlbnRhOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJtYWdlbnRhIik7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZZWxs
b3c6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInllbGxvdyIpOwotICAgIGNhc2UgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQmxhY2s6Ci0gICAgICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoImJsYWNrIik7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1p
bmxpbmUgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIGZyb21Q
cm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAi
Y3lhbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3lu
Y1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JNYWdlbnRh
OwotICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvclllbGxvdzsKLSAgICBpZiAodmFsdWUg
PT0gImJsYWNrIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TEFzeW5jUHJpbnRDb2xvckJsYWNrOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JDeWFuOwot
fQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMt
d2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBp
bnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKLQot
KyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNOdW1iZXIgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUNvbG9yTGlz
dDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOwotKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAodm9p
ZClfcGFyc2VEYXRhYmFzZUlkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
TnVtYmVyIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKLX0K
LQotKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gQChJbnNwZWN0b3I6
OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KHBh
eWxvYWQpKTsKLX0KLQotKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0cmluZz4qLyBjbGFz
c10pOwotICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2FkOwot
fQotCi0rICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVl
ID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5
bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotCi11c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNE
aWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7
Ci0gICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKLQotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7
Ci0gICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKLQotICAg
IHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W2pzb25PYmplY3QgdG9JbnNwZWN0b3JPYmplY3Rd
LmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6
KGludCljb2RlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG1l
c3NhZ2UsIEAibWVzc2FnZSIpOwotCi0gICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICBz
ZWxmLmNvZGUgPSBjb2RlOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0TWVz
c2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzptZXNzYWdl
IGZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAoTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAg
cmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKHZvaWQpc2V0
Q29kZTooaW50KWNvZGUKLXsKLSAgICBbc3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktleTpAImNv
ZGUiXTsKLX0KLQotLSAoaW50KWNvZGUKLXsKLSAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JL
ZXk6QCJjb2RlIl07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJh
bWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFy
YW1ldGVycy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUyMTM5
M2RkNTdmZmViNGY2Y2UxMDQzYzNhMTQ1ZDY3MmQwMGNhYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVy
bi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTYwOSArMCwwIEBA
Ci0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVy
bi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotLy8gRGF0YWJhc2UuCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJh
c2UuUHJpbWFyeUNvbG9ycyIsIHtSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJs
dWUifSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIsIFt7Im5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6
ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAi
c3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6
ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjog
Im9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjog
Im9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBl
IjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAic3FsRXJyb3IiLCAidHlw
ZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInNjcmVlbkNvbG9yIiwg
InR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJhbHRlcm5hdGVD
b2xvcnMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInBy
aW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfV0sIFsiY29sdW1u
TmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFi
YXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInBy
aW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2Uu
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwgW3sibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0
eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogIm5vdGVzIiwgInR5
cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAidGltZXN0YW1wIiwg
InR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAidmFsdWVzIiwg
InR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAicGF5bG9hZCIs
ICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogImRhdGFiYXNl
SWQiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJzcWxF
cnJvciIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInNj
cmVlbkNvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUi
OiAiYWx0ZXJuYXRlQ29sb3JzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogZmFsc2V9
LCB7Im5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZh
bHNlfV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJw
YXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJu
YXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9t
YWluKCJEYXRhYmFzZSIpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwt
Y2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6
Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+
JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVy
KTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRy
PEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBB
bHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkq
IGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX25vdGVzLCBjb25zdCBkb3Vi
bGUqIGNvbnN0IGluX3RpbWVzdGFtcCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Qq
IGluX3ZhbHVlcywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogY29uc3QgaW5fcGF5
bG9hZCwgY29uc3QgaW50KiBjb25zdCBpbl9kYXRhYmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fc2NyZWVu
Q29sb3IsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkqIGluX2FsdGVybmF0ZUNvbG9y
cywgY29uc3QgU3RyaW5nKiBjb25zdCBpbl9wcmludENvbG9yKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yOjpJbnNwZWN0b3JBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90
ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
JiBpbl92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBpbl9zcWxFcnJv
ciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0
b3JBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3Ip
ID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMt
d2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLQotY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIgewotcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncHJpbnRDb2xvcicg
d2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnMuCi0gICAgZW51bSBjbGFzcyBQcmludENvbG9yIHsKLSAgICAgICAgQ3lhbiA9IDMsCi0gICAg
ICAgIE1hZ2VudGEgPSA0LAotICAgICAgICBZZWxsb3cgPSA1LAotICAgICAgICBCbGFjayA9IDYs
Ci0gICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENvbG9yCi0gICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3RvckFycmF5KiBvcHRfaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0
X2luX25vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IG9wdF9pbl90aW1lc3RhbXAsIGNvbnN0IElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBvcHRfaW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlKiBjb25zdCBvcHRfaW5fcGF5bG9hZCwgY29uc3QgaW50KiBjb25zdCBv
cHRfaW5fZGF0YWJhc2VJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIG9wdF9p
bl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRfaW5fc2NyZWVuQ29sb3IsIGNvbnN0
IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkqIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0
IFN0cmluZyogY29uc3Qgb3B0X2luX3ByaW50Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxTdHJpbmc+PiYgb3B0X291dF9jb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90
b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIG9wdF9vdXRfbm90ZXMsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok9wdE91dHB1dDxkb3VibGU+KiBvcHRfb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90
b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piogb3B0X291dF92YWx1
ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlPiogb3B0X291dF9wYXlsb2FkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50
Piogb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3B0X291dF9hbHRlcm5hdGVDb2xvcnMs
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvcHRfb3V0X3By
aW50Q29sb3IpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYgaW5fY29s
dW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNv
bnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBpbl92YWx1ZXMsIEluc3BlY3Rvcjo6SW5z
cGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5D
b2xvciwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3Jz
LCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxTdHJpbmc+PiYgb3V0X2NvbHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91
YmxlKiBvdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogb3V0X3ZhbHVl
cywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFi
YXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRf
c3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBv
dXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29s
b3JMaXN0PiYgb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAg
dmlydHVhbCB+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNz
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFj
a2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlk
ZTsKLXByaXZhdGU6Ci0gICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZv
aWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hl
cihBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVy
KSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZh
dGU6Ci0gICAgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVE
aXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2Fn
ZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBj
b21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
LSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6On5EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1S
ZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19
Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIo
QmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
cihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0gICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgi
RGF0YWJhc2UiKSwgdGhpcyk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVj
dG9yT2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1l
dGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFy
YW1ldGVycyk7Ci0KLSAgICBpZiAobWV0aG9kID09ICJleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzIikKLSAgICAgICAgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdU
Rk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzIikKLSAgICAgICAgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJl
cXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiRGF0YWJhc2UiLCAnLicsIG1ldGhvZCwgIicg
d2FzIG5vdCBmb3VuZCIpKTsKLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpl
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpCi17Ci0gICAgYm9vbCBvcHRfaW5fY29sdW1uTmFtZXNf
dmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5
PiBvcHRfaW5fY29sdW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJh
bWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksICZvcHRfaW5fY29sdW1u
TmFtZXNfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA9IGZh
bHNlOwotICAgIFN0cmluZyBvcHRfaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRT
dHJpbmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJub3RlcyIpLCAmb3B0X2luX25v
dGVzX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID0g
ZmFsc2U7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4gb3B0X2lu
X3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJhbWV0ZXJzLmdl
dCgpLCBBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCAmb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZv
dW5kKTsKLSAgICBib29sIG9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gb3B0X2luX3ZhbHVlcyA9IG1fYmFja2Vu
ZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInZh
bHVlcyIpLCAmb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9wYXls
b2FkX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZT4gb3B0X2luX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwYXJh
bWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgJm9wdF9pbl9wYXlsb2FkX3Zh
bHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZhbHNl
OwotICAgIGludCBvcHRfaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldElu
dGVnZXIocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksICZvcHRf
aW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9zcWxFcnJvcl92YWx1
ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBv
cHRfaW5fc3FsRXJyb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVy
cy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCAmb3B0X2luX3NxbEVycm9yX3ZhbHVl
Rm91bmQpOwotICAgIGJvb2wgb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsK
LSAgICBTdHJpbmcgb3B0X2luX3NjcmVlbkNvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgJm9w
dF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9hbHRlcm5hdGVD
b2xvcnNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ckFycmF5PiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwg
Jm9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fcHJp
bnRDb2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9pbl9wcmludENvbG9y
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJ
TGl0ZXJhbCgicHJpbnRDb2xvciIpLCAmb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCk7Ci0g
ICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKLSAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6SW52YWxpZFBhcmFtcywgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1l
dGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnMocmVxdWVzdElkLCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/IG9w
dF9pbl9jb2x1bW5OYW1lcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9ub3Rlc192YWx1ZUZvdW5k
ID8gJm9wdF9pbl9ub3RlcyA6IG51bGxwdHIsIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA/
ICZvcHRfaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID8g
b3B0X2luX3ZhbHVlcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQg
PyBvcHRfaW5fcGF5bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVl
Rm91bmQgPyAmb3B0X2luX2RhdGFiYXNlSWQgOiBudWxscHRyLCBvcHRfaW5fc3FsRXJyb3JfdmFs
dWVGb3VuZCA/IG9wdF9pbl9zcWxFcnJvci5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9zY3JlZW5D
b2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIG9wdF9pbl9h
bHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMuZ2V0KCkg
OiBudWxscHRyLCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9wcmludENv
bG9yIDogbnVsbHB0cik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVy
cm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpP
cHRPdXRwdXQ8U3RyaW5nPiBvdXRfbm90ZXM7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0
T3V0cHV0PGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpP
cHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG91dF92YWx1ZXM7Ci0gICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IG91
dF9wYXlsb2FkOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RGF0YWJhc2VJZD4gb3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwot
ICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3Jl
ZW5Db2xvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9y
TGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGVycm9yLCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3Vu
ZCA/IG9wdF9pbl9jb2x1bW5OYW1lcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9ub3Rlc192YWx1
ZUZvdW5kID8gJm9wdF9pbl9ub3RlcyA6IG51bGxwdHIsIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVG
b3VuZCA/ICZvcHRfaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgb3B0X2luX3ZhbHVlc192YWx1ZUZv
dW5kID8gb3B0X2luX3ZhbHVlcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wYXlsb2FkX3ZhbHVl
Rm91bmQgPyBvcHRfaW5fcGF5bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9kYXRhYmFzZUlk
X3ZhbHVlRm91bmQgPyAmb3B0X2luX2RhdGFiYXNlSWQgOiBudWxscHRyLCBvcHRfaW5fc3FsRXJy
b3JfdmFsdWVGb3VuZCA/IG9wdF9pbl9zcWxFcnJvci5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9z
Y3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIG9w
dF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMu
Z2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9w
cmludENvbG9yIDogbnVsbHB0ciwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3Rp
bWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9z
cWxFcnJvciwgJm91dF9zY3JlZW5Db2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgJm91dF9wcmlu
dENvbG9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKG91dF9j
b2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJj
b2x1bW5OYW1lcyIpLCBvdXRfY29sdW1uTmFtZXMpOwotICAgICAgICBpZiAob3V0X25vdGVzLmlz
QXNzaWduZWQoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
bm90ZXMiKSwgb3V0X25vdGVzLmdldFZhbHVlKCkpOwotICAgICAgICBpZiAob3V0X3RpbWVzdGFt
cC5pc0Fzc2lnbmVkKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldERvdWJsZShBU0NJSUxpdGVy
YWwoInRpbWVzdGFtcCIpLCBvdXRfdGltZXN0YW1wLmdldFZhbHVlKCkpOwotICAgICAgICBpZiAo
b3V0X3ZhbHVlcy5pc0Fzc2lnbmVkKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldE9iamVjdChB
U0NJSUxpdGVyYWwoInZhbHVlcyIpLCBvdXRfdmFsdWVzLmdldFZhbHVlKCkpOwotICAgICAgICBp
ZiAob3V0X3BheWxvYWQuaXNBc3NpZ25lZCgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1
ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgb3V0X3BheWxvYWQuZ2V0VmFsdWUoKSk7Ci0gICAg
ICAgIGlmIChvdXRfZGF0YWJhc2VJZC5pc0Fzc2lnbmVkKCkpCi0gICAgICAgICAgICByZXN1bHQt
PnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG91dF9kYXRhYmFzZUlkLmdl
dFZhbHVlKCkpOwotICAgICAgICBpZiAob3V0X3NxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0
LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBvdXRfc3FsRXJyb3IpOwotICAg
ICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmlzQXNzaWduZWQoKSkKLSAgICAgICAgICAgIHJlc3Vs
dC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgb3V0X3NjcmVlbkNvbG9y
LmdldFZhbHVlKCkpOwotICAgICAgICBpZiAob3V0X2FsdGVybmF0ZUNvbG9ycykKLSAgICAgICAg
ICAgIHJlc3VsdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgb3V0
X2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5pc0Fzc2lnbmVk
KCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29s
b3IiKSwgb3V0X3ByaW50Q29sb3IuZ2V0VmFsdWUoKSk7Ci0gICAgfQotICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIFdURk1vdmUocmVzdWx0KSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgV1RGTW92ZShlcnJvcikpOwotfQotCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6
OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKQotewotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvckFycmF5PiBpbl9jb2x1bW5OYW1lcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5
KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgbnVsbHB0cik7
Ci0gICAgU3RyaW5nIGluX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBh
cmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbnVsbHB0cik7Ci0gICAgZG91
YmxlIGluX3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJhbWV0
ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCBudWxscHRyKTsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3ZhbHVlcyA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInZhbHVlcyIp
LCBudWxscHRyKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gaW5fcGF5
bG9hZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFZhbHVlKHBhcmFtZXRlcnMuZ2V0KCksIEFT
Q0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBudWxscHRyKTsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlM
aXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIpOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4gaW5fc3FsRXJyb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmpl
Y3QocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBudWxscHRyKTsK
LSAgICBTdHJpbmcgaW5fc2NyZWVuQ29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJp
bmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBudWxscHRy
KTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gaW5fYWx0ZXJuYXRlQ29s
b3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgQVND
SUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3By
aW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQo
KSwgQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIG51bGxwdHIpOwotICAgIGlmIChtX2JhY2tl
bmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7Ci0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQ
YXJhbXMsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4n
dCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIikp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhyZXF1
ZXN0SWQsICppbl9jb2x1bW5OYW1lcywgaW5fbm90ZXMsIGluX3RpbWVzdGFtcCwgKmluX3ZhbHVl
cywgKmluX3BheWxvYWQsIGluX2RhdGFiYXNlSWQsICppbl9zcWxFcnJvciwgaW5fc2NyZWVuQ29s
b3IsICppbl9hbHRlcm5hdGVDb2xvcnMsIGluX3ByaW50Q29sb3IpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0g
ICAgU3RyaW5nIG91dF9ub3RlczsKLSAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKLSAgICBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCBvdXRfdmFsdWVzOwotICAgIEluc3BlY3Rvcjo6SW5zcGVj
dG9yVmFsdWUgb3V0X3BheWxvYWQ7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkRhdGFiYXNlSWQgb3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwotICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNv
bG9yczsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBv
dXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
ZXJyb3IsICppbl9jb2x1bW5OYW1lcywgaW5fbm90ZXMsIGluX3RpbWVzdGFtcCwgKmluX3ZhbHVl
cywgKmluX3BheWxvYWQsIGluX2RhdGFiYXNlSWQsICppbl9zcWxFcnJvciwgaW5fc2NyZWVuQ29s
b3IsICppbl9hbHRlcm5hdGVDb2xvcnMsIGluX3ByaW50Q29sb3IsIG91dF9jb2x1bW5OYW1lcywg
Jm91dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91
dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsICZvdXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5h
dGVDb2xvcnMsICZvdXRfcHJpbnRDb2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7
Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBv
dXRfY29sdW1uTmFtZXMpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
Im5vdGVzIiksIG91dF9ub3Rlcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKEFTQ0lJTGl0
ZXJhbCgidGltZXN0YW1wIiksIG91dF90aW1lc3RhbXApOwotICAgICAgICByZXN1bHQtPnNldE9i
amVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBvdXRfdmFsdWVzKTsKLSAgICAgICAgcmVzdWx0
LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgb3V0X3BheWxvYWQpOwotICAgICAg
ICByZXN1bHQtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG91dF9kYXRh
YmFzZUlkKTsKLSAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJv
ciIpLCBvdXRfc3FsRXJyb3IpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoInNjcmVlbkNvbG9yIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRB
cnJheShBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBvdXRfYWx0ZXJuYXRlQ29sb3Jz
KTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiks
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShv
dXRfcHJpbnRDb2xvcikpOwotICAgIH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJl
c3VsdCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3Ip
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRo
LW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0j
IyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVk
ZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5h
bWVzcGFjZSBQcm90b2NvbCB7Ci0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNl
IERhdGFiYXNlIHsKLWNsYXNzIEVycm9yOwotZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzOwotfSAv
LyBEYXRhYmFzZQotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5cGVk
ZWZzLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLS8qIFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFi
YXNlIG9iamVjdC4gKi8KLXR5cGVkZWYgaW50IERhdGFiYXNlSWQ7Ci10eXBlZGVmIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzPiBDb2xvckxpc3Q7Ci19IC8vIERhdGFiYXNlCi0vLyBFbmQgb2YgdHlwZWRlZnMuCi0K
LW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShp
bnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3Rh
dGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBl
cnMKLQotbmFtZXNwYWNlIERhdGFiYXNlIHsKLS8qICAqLwotZW51bSBjbGFzcyBQcmltYXJ5Q29s
b3JzIHsKLSAgICBSZWQgPSAwLAotICAgIEdyZWVuID0gMSwKLSAgICBCbHVlID0gMiwKLX07IC8v
IGVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycwotLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBF
cnJvciA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgewotcHVibGljOgot
ICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE1lc3NhZ2VTZXQg
PSAxIDw8IDAsCi0gICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxkc1Nl
dCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNU
QVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsK
LSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0luc3BlY3Rvck9iamVj
dD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZnJpZW5kIGNsYXNzIEVycm9yOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9w
ZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJtZXNzYWdlIiksIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImNv
ZGUiKSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0g
c2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAg
ICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigm
cmVzdWx0KSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6Ci0gICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkK
LSAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0g
ICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBEYXRhYmFz
ZQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUHJv
dG9jb2xFbnVtVHlwZT4KLXN0ZDo6b3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotCi0vLyBFbnVtcyBpbiB0aGUgJ0RhdGFi
YXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJik7
Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29s
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxs
LXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2Nv
bCB7Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewotICAgICJyZWQiLAotICAgICJncmVlbiIsCi0g
ICAgImJsdWUiLAotICAgICJjeWFuIiwKLSAgICAibWFnZW50YSIsCi0gICAgInllbGxvdyIsCi0g
ICAgImJsYWNrIiwKLX07Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkg
ewotICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKLX0KLQotLy8gRW51bXMg
aW4gdGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1zdGQ6Om9wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNv
bnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBj
b25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpSZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkdyZWVuLAotICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpCbHVlLAot
ICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAgIGlmIChw
cm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0p
Ci0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LX0KLQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxl
cjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBoYW5kbGVy
KSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVj
dG9yQXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX25vdGVzLCBj
b25zdCBkb3VibGUqIGNvbnN0IGluX3RpbWVzdGFtcCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogY29u
c3QgaW5fcGF5bG9hZCwgY29uc3QgaW50KiBjb25zdCBpbl9kYXRhYmFzZUlkLCBjb25zdCBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogY29uc3Qg
aW5fc2NyZWVuQ29sb3IsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkqIGluX2FsdGVy
bmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBjb25zdCBpbl9wcmludENvbG9yKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29u
c3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3QmIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBp
bl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBJ
bnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmlu
ZyYgaW5fcHJpbnRDb2xvcikgb3ZlcnJpZGU7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxU
ZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9w
dGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0j
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9j
b250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gX2Rh
dGFiYXNlSGFuZGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjoo
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAg
QVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19kYXRhYmFzZUhhbmRs
ZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldERhdGFi
YXNlSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiloYW5kbGVy
Ci17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2RhdGFiYXNlSGFuZGxlcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgW19kYXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX2RhdGFiYXNlSGFuZGxl
ciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiho
YW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5h
dGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPj4oQVNDSUlMaXRlcmFsKCJEYXRhYmFzZSIpLCAq
X2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9s
bGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAo
aWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPilkYXRhYmFzZUhhbmRsZXIKLXsK
LSAgICByZXR1cm4gX2RhdGFiYXNlSGFuZGxlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Y29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1A
cHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RGF0YWJhc2VIYW5kbGVyOikg
aWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBkYXRhYmFzZUhhbmRsZXI7Ci1A
ZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1
cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBP
YmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJh
eSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fbm90ZXMsIGNvbnN0IGRv
dWJsZSogY29uc3QgaW5fdGltZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCogaW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBjb25zdCBpbl9w
YXlsb2FkLCBjb25zdCBpbnQqIGNvbnN0IGluX2RhdGFiYXNlSWQsIGNvbnN0IEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBjb25zdCBpbl9zY3Jl
ZW5Db2xvciwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSogaW5fYWx0ZXJuYXRlQ29s
b3JzLCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX3ByaW50Q29sb3IpCi17Ci0gICAgaWQgZXJyb3JD
YWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0
aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVu
Q29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciAqcHJpbnRD
b2xvcikgewotICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9P
UFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVz
Iik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2
YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0g
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5h
dGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgICAgIGlmIChjb2x1bW5OYW1lcykK
LSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5O
YW1lcyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheSgqY29sdW1uTmFtZXMpKTsKLSAgICAgICAgaWYg
KG5vdGVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJub3RlcyIpLCAqbm90ZXMpOwotICAgICAgICBpZiAodGltZXN0YW1wKQotICAgICAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgKnRpbWVz
dGFtcCk7Ci0gICAgICAgIGlmICh2YWx1ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNl
dE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBbKnZhbHVlcyB0b0luc3BlY3Rvck9iamVj
dF0pOwotICAgICAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIFsqcGF5bG9hZCB0b0luc3BlY3Rvck9iamVj
dF0pOwotICAgICAgICBpZiAoZGF0YWJhc2VJZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgKmRhdGFiYXNlSWQpOwotICAg
ICAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdChB
U0NJSUxpdGVyYWwoInNxbEVycm9yIiksIFsqc3FsRXJyb3IgdG9JbnNwZWN0b3JPYmplY3RdKTsK
LSAgICAgICAgaWYgKHNjcmVlbkNvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCB0b1Byb3RvY29sU3RyaW5nKCpzY3Jl
ZW5Db2xvcikpOwotICAgICAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBpbnNw
ZWN0b3JTdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAgIGlmIChwcmludENv
bG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJw
cmludENvbG9yIiksIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3IpKTsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRP
YmplY3QpKTsKLSAgICB9OwotCi0gICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2NvbHVt
bk5hbWVzOwotICAgIGlmIChpbl9jb2x1bW5OYW1lcykKLSAgICAgICAgb19pbl9jb2x1bW5OYW1l
cyA9IG9iamNTdHJpbmdBcnJheShpbl9jb2x1bW5OYW1lcyk7Ci0gICAgTlNTdHJpbmcgKm9faW5f
bm90ZXM7Ci0gICAgaWYgKGluX25vdGVzKQotICAgICAgICBvX2luX25vdGVzID0gKmluX25vdGVz
OwotICAgIGRvdWJsZSBvX2luX3RpbWVzdGFtcDsKLSAgICBpZiAoaW5fdGltZXN0YW1wKQotICAg
ICAgICBvX2luX3RpbWVzdGFtcCA9ICppbl90aW1lc3RhbXA7Ci0gICAgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICpvX2luX3ZhbHVlczsKLSAgICBpZiAoaW5fdmFsdWVzKQotICAgICAgICBvX2luX3Zh
bHVlcyA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JP
YmplY3Q6aW5fdmFsdWVzXSBhdXRvcmVsZWFzZV07Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICpvX2luX3BheWxvYWQ7Ci0gICAgaWYgKGluX3BheWxvYWQpCi0gICAgICAgIG9faW5fcGF5bG9h
ZCA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmpl
Y3Q6aW5fcGF5bG9hZF0gYXV0b3JlbGVhc2VdOwotICAgIGludCBvX2luX2RhdGFiYXNlSWQ7Ci0g
ICAgaWYgKGluX2RhdGFiYXNlSWQpCi0gICAgICAgIG9faW5fZGF0YWJhc2VJZCA9ICppbl9kYXRh
YmFzZUlkOwotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKm9faW5fc3FsRXJyb3I7Ci0g
ICAgaWYgKGluX3NxbEVycm9yKQotICAgICAgICBvX2luX3NxbEVycm9yID0gW1tbVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6aW5fc3FsRXJy
b3JdIGF1dG9yZWxlYXNlXTsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMg
b19pbl9zY3JlZW5Db2xvcjsKLSAgICBpZiAoaW5fc2NyZWVuQ29sb3IpCi0gICAgICAgIG9faW5f
c2NyZWVuQ29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzPigqaW5fc2NyZWVuQ29sb3IpOwotICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
b19pbl9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgaWYgKGluX2FsdGVybmF0ZUNvbG9ycykKLSAgICAg
ICAgb19pbl9hbHRlcm5hdGVDb2xvcnMgPSBvYmpjU3RyaW5nQXJyYXkoaW5fYWx0ZXJuYXRlQ29s
b3JzKTsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yIG9faW5fcHJpbnRDb2xvcjsKLSAgICBpZiAoaW5fcHJpbnRDb2xvcikKLSAg
ICAgICAgb19pbl9wcmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+KCppbl9wcmludENv
bG9yKTsKLQotICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRo
RXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2sgY29sdW1uTmFtZXM6KGluX2NvbHVtbk5hbWVzID8gJm9faW5fY29sdW1uTmFtZXMgOiBuaWwp
IG5vdGVzOihpbl9ub3RlcyA/ICZvX2luX25vdGVzIDogbmlsKSB0aW1lc3RhbXA6KGluX3RpbWVz
dGFtcCA/ICZvX2luX3RpbWVzdGFtcCA6IG5pbCkgdmFsdWVzOihpbl92YWx1ZXMgPyAmb19pbl92
YWx1ZXMgOiBuaWwpIHBheWxvYWQ6KGluX3BheWxvYWQgPyAmb19pbl9wYXlsb2FkIDogbmlsKSBk
YXRhYmFzZUlkOihpbl9kYXRhYmFzZUlkID8gJm9faW5fZGF0YWJhc2VJZCA6IG5pbCkgc3FsRXJy
b3I6KGluX3NxbEVycm9yID8gJm9faW5fc3FsRXJyb3IgOiBuaWwpIHNjcmVlbkNvbG9yOihpbl9z
Y3JlZW5Db2xvciA/ICZvX2luX3NjcmVlbkNvbG9yIDogbmlsKSBhbHRlcm5hdGVDb2xvcnM6KGlu
X2FsdGVybmF0ZUNvbG9ycyA/ICZvX2luX2FsdGVybmF0ZUNvbG9ycyA6IG5pbCkgcHJpbnRDb2xv
cjooaW5fcHJpbnRDb2xvciA/ICZvX2luX3ByaW50Q29sb3IgOiBuaWwpXTsKLX0KLQotdm9pZCBP
YmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5
JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVz
dGFtcCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIGluX3ZhbHVlcywgSW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGlu
X3NjcmVlbkNvbG9yLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBpbl9hbHRlcm5h
dGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikKLXsKLSAgICBpZCBlcnJvckNh
bGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGlu
Z0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVz
dGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNx
bEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgcHJpbnRDb2xvcikgewotICAg
ICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
Uihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5
bG9hZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihz
cWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBp
bnNwZWN0b3JTdHJpbmdBcnJheShjb2x1bW5OYW1lcykpOwotICAgICAgICByZXN1bHRPYmplY3Qt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG5vdGVzKTsKLSAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdGltZXN0YW1wKTsK
LSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwg
W3ZhbHVlcyB0b0luc3BlY3Rvck9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFZh
bHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBbcGF5bG9hZCB0b0luc3BlY3Rvck9iamVjdF0p
OwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFz
ZUlkIiksIGRhdGFiYXNlSWQpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdChBU0NJ
SUxpdGVyYWwoInNxbEVycm9yIiksIFtzcWxFcnJvciB0b0luc3BlY3Rvck9iamVjdF0pOwotICAg
ICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiks
IHRvUHJvdG9jb2xTdHJpbmcoc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRBcnJheShBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBpbnNwZWN0b3JTdHJpbmdB
cnJheShhbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIHRvUHJvdG9jb2xTdHJpbmcocHJpbnRDb2xvcikp
OwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBX
VEZNb3ZlKHJlc3VsdE9iamVjdCkpOwotICAgIH07Ci0KLSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKm9faW5fY29sdW1uTmFtZXMgPSBvYmpjU3RyaW5nQXJyYXkoJmluX2NvbHVtbk5hbWVzKTsK
LSAgICBOU1N0cmluZyAqb19pbl9ub3RlcyA9IGluX25vdGVzOwotICAgIGRvdWJsZSBvX2luX3Rp
bWVzdGFtcCA9IGluX3RpbWVzdGFtcDsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5f
dmFsdWVzID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEluc3BlY3Rv
ck9iamVjdDomaW5fdmFsdWVzXSBhdXRvcmVsZWFzZV07Ci0gICAgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICpvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRX
aXRoSW5zcGVjdG9yT2JqZWN0OiZpbl9wYXlsb2FkXSBhdXRvcmVsZWFzZV07Ci0gICAgaW50IG9f
aW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqb19pbl9zcWxFcnJvciA9IFtbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2Nd
IGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0OiZpbl9zcWxFcnJvcl0gYXV0b3JlbGVhc2VdOwotICAg
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBvX2luX3NjcmVlbkNvbG9yID0gZnJv
bVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oaW5fc2Ny
ZWVuQ29sb3IpOwotICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9hbHRlcm5hdGVDb2xv
cnMgPSBvYmpjU3RyaW5nQXJyYXkoJmluX2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIG9faW5fcHJp
bnRDb2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+KGluX3ByaW50Q29sb3IpOwotCi0gICAgW21f
ZGVsZWdhdGUgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6ZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOm9f
aW5fY29sdW1uTmFtZXMgbm90ZXM6b19pbl9ub3RlcyB0aW1lc3RhbXA6b19pbl90aW1lc3RhbXAg
dmFsdWVzOm9faW5fdmFsdWVzIHBheWxvYWQ6b19pbl9wYXlsb2FkIGRhdGFiYXNlSWQ6b19pbl9k
YXRhYmFzZUlkIHNxbEVycm9yOm9faW5fc3FsRXJyb3Igc2NyZWVuQ29sb3I6b19pbl9zY3JlZW5D
b2xvciBhbHRlcm5hdGVDb2xvcnM6b19pbl9hbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjpvX2lu
X3ByaW50Q29sb3JdOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVy
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0Lmg+Ci0KLQotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I7Ci0KLQot
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkLAotICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuLAotICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9yc0JsdWUsCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2Vy
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvckN5YW4sCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxh
Y2ssCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7Ci0gICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4sCi0g
ICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2ssCi19OwotCi10eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3IpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93
LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvckJsYWNrLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7Ci0gICAg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
Q3lhbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKLX07Ci0KLQotX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2Fk
OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3Ry
aW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKLS8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOwotQGVuZAotCi1AcHJvdG9jb2wgVGVz
dFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUByZXF1aXJlZAotLSAo
dm9pZClleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQo
XikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZChe
KShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3Rlcywg
ZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9y
cyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
ciAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFt
cDooZG91YmxlICopdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZh
bHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopcGF5bG9hZCBkYXRhYmFzZUlk
OihpbnQgKilkYXRhYmFzZUlkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoq
KXNxbEVycm9yIHNjcmVlbkNvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMg
KilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilh
bHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciAqKXByaW50Q29sb3I7Ci0tICh2b2lkKWV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5n
ICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8q
PE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0
YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3Fs
RXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNB
cnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciBwcmludENvbG9yKSlzdWNjZXNz
Q2FsbGJhY2sgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVz
IG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1
ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpT
T05PYmplY3QgKilwYXlsb2FkIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHNxbEVycm9yOihU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycylzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IpcHJpbnRD
b2xvcjsKLUBlbmQKLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVy
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLQot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5
Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIE9iakNFbnVtVHlwZT4KLU9iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSk7Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUp
IHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDoKLSAgICAg
ICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgicmVkIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnNHcmVlbjoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiZ3Jl
ZW4iKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU6Ci0g
ICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImJsdWUiKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRl
PD4KLWlubGluZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJyZWQiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOwotICAg
IGlmICh2YWx1ZSA9PSAiZ3JlZW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJh
c2VQcmltYXJ5Q29sb3JzR3JlZW47Ci0gICAgaWYgKHZhbHVlID09ICJibHVlIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU7Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9yc1JlZDsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCi17
Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuIEFT
Q0lJTGl0ZXJhbCgiY3lhbiIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6Ci0gICAgICAgIHJldHVybiBB
U0NJSUxpdGVyYWwoIm1hZ2VudGEiKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVy
biBBU0NJSUxpdGVyYWwoInllbGxvdyIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1
cm4gQVNDSUlMaXRlcmFsKCJibGFjayIpOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5l
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3IgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZh
bHVlID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAi
bWFnZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInll
bGxvdyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2si
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yQ3lhbjsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFs
dWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgiY3lhbiIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6Ci0gICAgICAgIHJl
dHVybiBBU0NJSUxpdGVyYWwoIm1hZ2VudGEiKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoInllbGxvdyIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOgotICAgICAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsKCJibGFjayIpOwotICAgIH0KLX0KLQotdGVtcGxhdGU8Pgot
aW5saW5lIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3IgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAg
aWYgKHZhbHVlID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1
ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsKLSAgICBpZiAodmFsdWUg
PT0gInllbGxvdyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAi
YmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yQ3lhbjsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5n
KFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
ciB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW46Ci0gICAgICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoImN5YW4iKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6Ci0gICAgICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoIm1hZ2VudGEiKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKLSAgICAg
ICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgieWVsbG93Iik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKLSAgICAg
ICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYmxhY2siKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4K
LWlubGluZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3IgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAg
aWYgKHZhbHVlID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47Ci0gICAgaWYgKHZhbHVl
ID09ICJtYWdlbnRhIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09
ICJ5ZWxsb3ciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxh
Y2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvckN5YW47Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFs
dWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOgotICAgICAgICByZXR1
cm4gQVNDSUlMaXRlcmFsKCJjeWFuIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgotICAgICAgICByZXR1
cm4gQVNDSUlMaXRlcmFsKCJtYWdlbnRhIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJl
dHVybiBBU0NJSUxpdGVyYWwoInllbGxvdyIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJl
dHVybiBBU0NJSUxpdGVyYWwoImJsYWNrIik7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxp
bmUgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2
YWx1ZSA9PSAiY3lhbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAi
bWFnZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOwotICAgIGlmICh2YWx1ZSA9PSAieWVs
bG93IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzsKLSAgICBpZiAodmFsdWUgPT0gImJsYWNrIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvckJsYWNrOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JDeWFuOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJz
ZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOwotKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlRXJyb3I6KFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNOdW1iZXIg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOwotICAgICpvdXRWYWx1
ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9y
czooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwot
ICAgICpvdXRWYWx1ZSA9IEAoSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPihwYXlsb2FkKSk7Ci19Ci0KLSsgKHZvaWQpX3BhcnNl
Q29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJh
eS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VFcnJvcjooVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlv
bmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Y29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1
ZXMuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IKLQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNT
dHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0p
KQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKLSAgICBzZWxmLm1l
c3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKLSAgICBzZWxmLmNv
ZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilqc29uT2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aElu
c3BlY3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldKSkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKLXsK
LSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNz
YWdlIik7Ci0KLSAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIHNlbGYuY29kZSA9IGNv
ZGU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmlu
ZyAqKW1lc3NhZ2UKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVz
c2FnZSJdOwotfQotCi0tIChOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICByZXR1cm4gW3N1cGVy
IHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAodm9pZClzZXRDb2RlOihpbnQpY29k
ZQotewotICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOwotfQotCi0t
IChpbnQpY29kZQotewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsK
LX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFp
bnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDk4ZTFjZTYyMDRkY2M3YTdjN2VhNWEwZDk2NTdhODgyOTlkZWMwMzYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0
aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwx
Mzk4ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1j
b21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotLy8gTmV0d29yazEuCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0
d29yazEubG9hZFJlc291cmNlMSIsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRl
RG9tYWluKCJOZXR3b3JrMSIpOwotCi0vLyBOZXR3b3JrMy4KLUluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UxIiwgW10sIFtdKTsKLUluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UyIiwgW10sIFtd
KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3Vy
Y2UzIiwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3Jr
My5sb2FkUmVzb3VyY2U0IiwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21t
YW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U1IiwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U2IiwgW10sIFtdKTsKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U3IiwgW10s
IFtdKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmszIik7Ci0jIyMg
RW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihS
ZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRj
aGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNr
ZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7
IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNw
YXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
IDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0
dWFsIH5BbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQpID0gMDsKLX07Ci1jbGFzcyBBbHRlcm5h
dGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxs
SWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihsb25nIGNhbGxJZCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgbG9hZFJlc291cmNlNShsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBs
b2FkUmVzb3VyY2U2KGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNv
dXJjZTcobG9uZyBjYWxsSWQpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMg
RW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0K
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLWNsYXNzIEFsdGVy
bmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI7Ci1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotCi1jbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7
Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIoKTsKLX07Ci0KLWNsYXNzIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShFcnJvclN0cmluZyYpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihFcnJvclN0cmluZyYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMyhFcnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgbG9hZFJlc291cmNlNChFcnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
bG9hZFJlc291cmNlNShFcnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlNihFcnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNl
NyhFcnJvclN0cmluZyYpID0gMDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5OZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLQotY2xhc3MgTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUo
QmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwot
ICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwotcHJpdmF0ZToKLSAgICB2
b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRl
cm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBu
dWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
cihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7
Ci0gICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRy
IH07Ci19OwotCi1jbGFzcyBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGlj
IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25n
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYg
bWVzc2FnZSkgb3ZlcnJpZGU7Ci1wcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2
b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgbG9hZFJlc291
cmNlNChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJz
KTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQg
bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBw
YXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURp
c3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0
ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxw
dHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKEJh
Y2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAg
ICBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlp
bmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi1OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci1OZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6fk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyPiBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFj
a2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmRE
aXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrMSIp
LCB0aGlzKTsKLX0KLQotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+
JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVj
dCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzOwotICAg
IG1lc3NhZ2UtPmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsK
LQotICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZTEiKQotICAgICAgICBsb2FkUmVzb3Vy
Y2UxKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiTmV0d29yazEiLCAnLicsIG1ldGhv
ZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKLX0KLQotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAg
IGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyLT5sb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJl
c291cmNlMShlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCkp
OwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0K
LQotUmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkp
OwotfQotCi1OZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3Bh
dGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVy
YWwoIk5ldHdvcmszIiksIHRoaXMpOwotfQotCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPElu
c3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiks
IHBhcmFtZXRlcnMpOwotCi0gICAgdHlwZWRlZiB2b2lkIChOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYmIG1lc3NhZ2UpOwotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBE
aXNwYXRjaE1hcDsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGlzcGF0Y2hNYXA+IGRpc3Bh
dGNoTWFwOwotICAgIGlmIChkaXNwYXRjaE1hcC5nZXQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
c3RhdGljIGNvbnN0IHN0cnVjdCBNZXRob2RUYWJsZSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFy
KiBuYW1lOwotICAgICAgICAgICAgQ2FsbEhhbmRsZXIgaGFuZGxlcjsKLSAgICAgICAgfSBjb21t
YW5kc1tdID0gewotICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMSIsICZOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxIH0sCi0gICAgICAgICAgICB7ICJsb2FkUmVzb3Vy
Y2UyIiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIgfSwKLSAgICAg
ICAgICAgIHsgImxvYWRSZXNvdXJjZTMiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlMyB9LAotICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNCIsICZOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0IH0sCi0gICAgICAgICAgICB7ICJsb2FkUmVz
b3VyY2U1IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUgfSwKLSAg
ICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTYiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlNiB9LAotICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNyIsICZOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3IH0sCi0gICAgICAgIH07Ci0gICAgICAg
IHNpemVfdCBsZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNvbW1hbmRzKTsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGRpc3BhdGNoTWFw
LmdldCgpLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKLSAgICB9
Ci0KLSAgICBhdXRvIGZpbmRSZXN1bHQgPSBkaXNwYXRjaE1hcC5nZXQoKS5maW5kKG1ldGhvZCk7
Ci0gICAgaWYgKGZpbmRSZXN1bHQgPT0gZGlzcGF0Y2hNYXAuZ2V0KCkuZW5kKCkpIHsKLSAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIk5ldHdvcmszIiwgJy4nLCBt
ZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAoKCp0aGlzKS4qZmluZFJlc3VsdC0+dmFsdWUpKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0
ZXJzKSk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
MShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikKLXsKLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVE
aXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNl
MShyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJv
clN0cmluZyBlcnJvcjsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoZXJyb3IpOwot
Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQgTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMihyZXF1ZXN0SWQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1f
YWdlbnQtPmxvYWRSZXNvdXJjZTIoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkK
LSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
TW92ZShyZXN1bHQpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3Zl
KGVycm9yKSk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291
cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikKLXsKLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5h
dGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291
cmNlMyhyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBF
cnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTMoZXJyb3Ip
OwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQgTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNChyZXF1ZXN0SWQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTQoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
V1RGTW92ZShyZXN1bHQpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZN
b3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlNShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikKLXsKLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRl
cm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJl
c291cmNlNShyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTUoZXJy
b3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKLSAgICBlbHNl
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQgTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNihyZXF1ZXN0SWQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTYoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgV1RGTW92ZShyZXN1bHQpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBX
VEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikKLXsK
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9h
bHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9h
ZFJlc291cmNlNyhyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0K
LSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTco
ZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKLSAgICBl
bHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFu
ZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVy
OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlp
bmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oIgotCi0jaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQt
c2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1lc3Bh
Y2UgTmV0d29yazIgewotLyogVW5pcXVlIGxvYWRlciBpZGVudGlmaWVyLiAqLwotdHlwZWRlZiBT
dHJpbmcgTG9hZGVySWQ7Ci19IC8vIE5ldHdvcmsyCi0vLyBFbmQgb2YgdHlwZWRlZnMuCi0KLQot
Ci19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFt
ZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVz
dFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyOwotQHByb3RvY29sIFRlc3RQcm90b2NvbE5l
dHdvcmszRG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3Mg
T2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0
ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3Bl
Y3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21h
aW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdmlydHVh
bCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRlOwotcHJpdmF0ZToK
LSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPj4gbV9k
ZWxlZ2F0ZTsKLX07Ci0KLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
IHsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihp
ZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0
ZSA9IGhhbmRsZXI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVl
c3RJZCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1
ZXN0SWQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcmVx
dWVzdElkKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHJl
cXVlc3RJZCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyBy
ZXF1ZXN0SWQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcg
cmVxdWVzdElkKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNyhsb25n
IHJlcXVlc3RJZCkgb3ZlcnJpZGU7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJv
dG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0K
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1j
b21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0Fs
dGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17
Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBp
ZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IF9uZXR3b3JrMUhhbmRsZXI7Ci0g
ICAgaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiBfbmV0d29yazNIYW5kbGVy
OwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRd
OwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJv
bGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwot
fQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX25ldHdvcmsxSGFuZGxlciByZWxlYXNlXTsK
LSAgICBbX25ldHdvcmszSGFuZGxlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19
Ci0KLS0gKHZvaWQpc2V0TmV0d29yazFIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURv
bWFpbkhhbmRsZXI+KWhhbmRsZXIKLXsKLSAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29yazFIYW5k
bGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX25ldHdvcmsxSGFuZGxlciByZWxlYXNlXTsK
LSAgICBfbmV0d29yazFIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0
ZXJuYXRlRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBz
dGQ6Om1ha2VfdW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXIsIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+PihBU0NJSUxp
dGVyYWwoIk5ldHdvcmsxIiksICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRj
aGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5h
dGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+
KW5ldHdvcmsxSGFuZGxlcgotewotICAgIHJldHVybiBfbmV0d29yazFIYW5kbGVyOwotfQotCi0t
ICh2b2lkKXNldE5ldHdvcmszSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5I
YW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmszSGFuZGxlcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgW19uZXR3b3JrM0hhbmRsZXIgcmVsZWFzZV07Ci0gICAg
X25ldHdvcmszSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0
ZURpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gc3RkOjpt
YWtlX3VuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyLCBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPj4oQVNDSUlMaXRlcmFs
KCJOZXR3b3JrMyIpLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikp
OwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdl
bnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiluZXR3
b3JrM0hhbmRsZXIKLXsKLSAgICByZXR1cm4gX25ldHdvcmszSGFuZGxlcjsKLX0KLQotQGVuZAot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYklu
c3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVj
dAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmsxSGFuZGxl
cjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gbmV0d29yazFIYW5kbGVy
OwotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmszSGFuZGxl
cjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4gbmV0d29yazNIYW5kbGVy
OwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNw
ZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVz
dElkKQotewotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nl
c3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH07Ci0KLSAgICBb
bV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBz
dWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotCi0KLQotdm9pZCBPYmpDSW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVl
c3RJZCkKLXsKLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNj
ZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9OwotCi0gICAg
W21fZGVsZWdhdGUgbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLXZvaWQgT2JqQ0luc3BlY3Rv
ck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQp
Ci17Ci0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0Nh
bGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJl
cXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfTsKLQotICAgIFttX2Rl
bGVnYXRlIGxvYWRSZXNvdXJjZTJXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkKQotewot
ICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFj
ayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0
ZSBsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgbG9h
ZFJlc291cmNlNFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNr
OnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWQgZXJy
b3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBl
bmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNv
dXJjZTVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNj
ZXNzQ2FsbGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkKQotewotICAgIGlkIGVycm9yQ2Fs
bGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCkpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2U2
V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrXTsKLX0KLQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlN1dpdGhF
cnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
a107Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLQot
Ci0KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlciA8TlNPYmpl
Y3Q+Ci1AcmVxdWlyZWQKLS0gKHZvaWQpbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOih2
b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZv
aWQoXikoKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xO
ZXR3b3JrM0RvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQHJlcXVpcmVkCi0tICh2b2lkKWxvYWRS
ZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKCkpc3VjY2Vzc0NhbGxiYWNrOwotLSAo
dm9pZClsb2FkUmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVy
cm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSgpKXN1Y2Nlc3NDYWxs
YmFjazsKLS0gKHZvaWQpbG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5T
U3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoKSlz
dWNjZXNzQ2FsbGJhY2s7Ci0tICh2b2lkKWxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazoo
dm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2
b2lkKF4pKCkpc3VjY2Vzc0NhbGxiYWNrOwotLSAodm9pZClsb2FkUmVzb3VyY2U1V2l0aEVycm9y
Q2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazoodm9pZCheKSgpKXN1Y2Nlc3NDYWxsYmFjazsKLS0gKHZvaWQpbG9hZFJlc291cmNl
NldpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoKSlzdWNjZXNzQ2FsbGJhY2s7Ci0tICh2b2lkKWxv
YWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKCkpc3VjY2Vzc0NhbGxiYWNrOwot
QGVuZAotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5z
LXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PYmpDRW51bVR5
cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi0KLQotCi0KLQot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRo
LXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsxRG9tYWluKQot
Ci1AZW5kCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazJE
b21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTG9hZGVySWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucyAoTmV0d29yazNEb21haW4pCi0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazFEb21haW4pCi0KLUBlbmQKLUBp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsyRG9tYWlu
KQotCi0rICh2b2lkKV9wYXJzZUxvYWRlcklkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5
bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5
bG9hZDsKLX0KLQotQGVuZAotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucyAoTmV0d29yazNEb21haW4pCi0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFy
eWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBmYTA1NTNjODBlYTc3M2NiNTZjNWU1ZmM5OTJhMjY4Mzg1NWM1NTNiLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJl
c3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEyNzMgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IElu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotLy8gVHlwZURvbWFpbi4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJU
eXBlRG9tYWluLlR5cGVEb21haW5FbnVtIiwge1NoYXJlZDogInNoYXJlZCIsIFJlZDogInJlZCIs
IEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKLQotLy8gQ29tbWFuZERvbWFpbi4KLUlu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJDb21tYW5kRG9tYWluLmNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlIiwgW10sIFsicmV0dXJuVmFsdWUiXSk7Ci1JbnNwZWN0b3JCYWNrZW5k
LmFjdGl2YXRlRG9tYWluKCJDb21tYW5kRG9tYWluIik7Ci0KLS8vIEV2ZW50RG9tYWluLgotSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50RG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkV2
ZW50RG9tYWluIik7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRXZlbnREb21haW4u
RXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlciIsIHtTaGFyZWQ6ICJzaGFyZWQiLCBCbGFj
azogImJsYWNrIiwgV2hpdGU6ICJ3aGl0ZSJ9KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJF
dmVudCgiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciIsIFsicGFyYW1ldGVyIl0p
OwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRXZlbnREb21haW4iKTsKLSMjIyBF
bmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6
Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+
JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVy
KTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRy
PEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBB
bHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZUNvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjb21tYW5k
V2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIGNhbGxJZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLWNsYXNzIEFsdGVybmF0ZUNvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLQotY2xhc3MgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdyZXR1
cm5WYWx1ZScgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGNvbW1hbmRXaXRoRW51bVJl
dHVyblZhbHVlLgotICAgIGVudW0gY2xhc3MgUmV0dXJuVmFsdWUgewotICAgICAgICBTaGFyZWQg
PSAwLAotICAgICAgICBDeWFuID0gNiwKLSAgICAgICAgTWFnZW50YSA9IDcsCi0gICAgICAgIFll
bGxvdyA9IDgsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBSZXR1cm5WYWx1ZQotICAgIHZpcnR1YWwg
dm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShFcnJvclN0cmluZyYsIENvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJldHVyblZhbHVlKiBvdXRfcmV0dXJuVmFsdWUp
ID0gMDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5Db21tYW5kRG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUo
QmFja2VuZERpc3BhdGNoZXImLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Kik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRo
b2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7Ci1wcml2YXRlOgot
ICAgIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNw
YXRjaGVyKEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRl
RGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVy
OyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgot
ICAgIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIENv
bW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICBDb21tYW5kRG9tYWlu
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2Vu
ZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1Db21tYW5kRG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjp+Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsg
fQotCi1SZWY8Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNo
ZXIsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNr
ZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOjpDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJh
Y2tlbmREaXNwYXRjaGVyLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBh
Z2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRj
aGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJDb21tYW5kRG9tYWluIiks
IHRoaXMpOwotfQotCi12b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2Jq
ZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0
ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJh
bWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gImNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVl
IikKLSAgICAgICAgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUocmVxdWVzdElkLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtl
U3RyaW5nKCdcJycsICJDb21tYW5kRG9tYWluIiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91
bmQiKSk7Ci19Ci0KLXZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5k
V2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAg
ICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlci0+Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUocmVxdWVzdElkKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXR1cm5WYWx1ZSBvdXRfcmV0
dXJuVmFsdWU7Ci0gICAgbV9hZ2VudC0+Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUoZXJyb3Is
ICZvdXRfcmV0dXJuVmFsdWUpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJyZXR1cm5WYWx1ZSIpLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3JldHVyblZh
bHVlKSk7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCkpOwotICAgIGVs
c2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi1jbGFzcyBFdmVudERvbWFpbkZy
b250ZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgRXZlbnREb21haW5Gcm9udGVuZERpc3Bh
dGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIo
ZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3Bh
cmFtZXRlcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV2ZW50V2l0aEVudW1QYXJh
bWV0ZXIuCi0gICAgICAgIGVudW0gY2xhc3MgUGFyYW1ldGVyIHsKLSAgICAgICAgICAgIFNoYXJl
ZCA9IDAsCi0gICAgICAgICAgICBCbGFjayA9IDQsCi0gICAgICAgICAgICBXaGl0ZSA9IDUsCi0g
ICAgICAgIH07IC8vIGVudW0gY2xhc3MgUGFyYW1ldGVyCi0gICAgdm9pZCBldmVudFdpdGhFbnVt
UGFyYW1ldGVyKFBhcmFtZXRlciBwYXJhbWV0ZXIpOwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJv
dXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
IyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12
b2lkIEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpldmVudFdpdGhFbnVtUGFyYW1ldGVy
KFBhcmFtZXRlciBwYXJhbWV0ZXIpCi17Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJFdmVudERvbWFpbi5l
dmVudFdpdGhFbnVtUGFyYW1ldGVyIikpOwotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwYXJhbWV0ZXIiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHBhcmFtZXRlcikpOwotICAgIGpzb25N
ZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgV1RGTW92ZShwYXJhbXNP
YmplY3QpKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51
bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5
cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9u
cy4KLW5hbWVzcGFjZSBUeXBlRG9tYWluIHsKLWVudW0gY2xhc3MgVHlwZURvbWFpbkVudW07Ci19
IC8vIFR5cGVEb21haW4KLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0KLQot
bmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGlu
dCBjb2RlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZh
bHVlKFQgZW51bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0
aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVy
cwotCi1uYW1lc3BhY2UgVHlwZURvbWFpbiB7Ci0vKiAgKi8KLWVudW0gY2xhc3MgVHlwZURvbWFp
bkVudW0gewotICAgIFNoYXJlZCA9IDAsCi0gICAgUmVkID0gMSwKLSAgICBHcmVlbiA9IDIsCi0g
ICAgQmx1ZSA9IDMsCi19OyAvLyBlbnVtIGNsYXNzIFR5cGVEb21haW5FbnVtCi19IC8vIFR5cGVE
b21haW4KLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFByb3RvY29sRW51bVR5cGU+Ci1zdGQ6Om9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQotLy8gRW51bXMgaW4gdGhlICdU
eXBlRG9tYWluJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4oY29u
c3QgU3RyaW5nJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNw
YWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVz
W10gPSB7Ci0gICAgInNoYXJlZCIsCi0gICAgInJlZCIsCi0gICAgImdyZWVuIiwKLSAgICAiYmx1
ZSIsCi0gICAgImJsYWNrIiwKLSAgICAid2hpdGUiLAotICAgICJjeWFuIiwKLSAgICAibWFnZW50
YSIsCi0gICAgInllbGxvdyIsCi19OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50
IGNvZGUpIHsKLSAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Ci19Ci0KLS8v
IEVudW1zIGluIHRoZSAnVHlwZURvbWFpbicgRG9tYWluCi10ZW1wbGF0ZTw+Ci1zdGQ6Om9wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlw
ZURvbWFpbkVudW0+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpTaGFyZWQsCi0gICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVu
dW06OlJlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWlu
OjpUeXBlRG9tYWluRW51bTo6R3JlZW4sCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OkJsdWUsCi0gICAgfTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09
IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJl
dHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0pY29u
c3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQotCi0KLX0gLy8g
bmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xDb21tYW5kRG9t
YWluRG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi0KLWNsYXNz
IE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJs
aWMgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAg
ICBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90
b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBo
YW5kbGVyOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxv
bmcgcmVxdWVzdElkKSBvdmVycmlkZTsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQ
cm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLQot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9j
b2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gX2NvbW1hbmREb21haW5IYW5kbGVyOwotICAg
IFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZXZlbnREb21h
aW5FdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xs
ZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0g
ICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfY29tbWFuZERv
bWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlciBy
ZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0Q29tbWFuZERv
bWFpbkhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPilo
YW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2NvbW1hbmREb21haW5IYW5kbGVyKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBbX2NvbW1hbmREb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAg
IF9jb21tYW5kRG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFs
dGVybmF0ZURpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iakNJbnNwZWN0b3JDb21tYW5k
RG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdl
bnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PENvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyPj4oQVNDSUlMaXRlcmFsKCJDb21tYW5kRG9tYWluIiksICpfY29udHJvbGxlciwgV1RG
TW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJh
QWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xD
b21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4pY29tbWFuZERvbWFpbkhhbmRsZXIKLXsKLSAgICBy
ZXR1cm4gX2NvbW1hbmREb21haW5IYW5kbGVyOwotfQotCi0tIChUZXN0UHJvdG9jb2xFdmVudERv
bWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWV2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyCi17
Ci0gICAgaWYgKCFfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9ldmVudERv
bWFpbkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVu
dERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAg
cmV0dXJuIF9ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0
cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4s
IHNldHRlcj1zZXRDb21tYW5kRG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbENvbW1hbmRE
b21haW5Eb21haW5IYW5kbGVyPiBjb21tYW5kRG9tYWluSGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3Bh
dGNoZXIgKmV2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0K
LXZvaWQgT2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFu
ZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWQgZXJyb3JDYWxs
YmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihUZXN0UHJvdG9j
b2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSByZXR1
cm5WYWx1ZSkgewotICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmlu
ZyhBU0NJSUxpdGVyYWwoInJldHVyblZhbHVlIiksIHRvUHJvdG9jb2xTdHJpbmcocmV0dXJuVmFs
dWUpKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgY29t
bWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0K
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JW
YWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi1AaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKLXsK
LSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBp
ZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwot
ICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
dm9pZClldmVudFdpdGhFbnVtUGFyYW1ldGVyV2l0aFBhcmFtZXRlcjooVGVzdFByb3RvY29sRXZl
bnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyKXBhcmFtZXRlcgotewotICAg
IGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0
ZXIoKTsKLQotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFt
ZXRlciIpKTsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgicGFyYW1ldGVyIiksIHRvUHJvdG9jb2xTdHJpbmcocGFyYW1ldGVyKSk7Ci0gICAganNv
bk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBXVEZNb3ZlKHBhcmFt
c09iamVjdCkpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlv
bi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0K
LQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sVHlwZURvbWFp
bkVudW0pIHsKLSAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZCwKLSAgICBUZXN0
UHJvdG9jb2xUeXBlRG9tYWluRW51bVJlZCwKLSAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51
bUdyZWVuLAotICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1ZSwKLX07Ci0KLXR5cGVk
ZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0
aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlKSB7Ci0gICAgVGVzdFByb3RvY29sQ29tbWFuZERv
bWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWVTaGFyZWQsCi0gICAgVGVz
dFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFs
dWVDeWFuLAotICAgIFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1
cm5WYWx1ZVJldHVyblZhbHVlTWFnZW50YSwKLSAgICBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWlu
Q29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZVllbGxvdywKLX07Ci0KLXR5cGVk
ZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51
bVBhcmFtZXRlclBhcmFtZXRlcikgewotICAgIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRX
aXRoRW51bVBhcmFtZXRlclBhcmFtZXRlclNoYXJlZCwKLSAgICBUZXN0UHJvdG9jb2xFdmVudERv
bWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXJCbGFjaywKLSAgICBUZXN0UHJvdG9j
b2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXJXaGl0ZSwKLX07Ci0K
LQotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXIgPE5T
T2JqZWN0PgotQHJlcXVpcmVkCi0tICh2b2lkKWNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0
aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazoodm9pZCheKShUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdp
dGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSkpc3VjY2Vzc0NhbGxiYWNr
OwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRl
cmZhY2UgVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09i
amVjdAotLSAodm9pZClldmVudFdpdGhFbnVtUGFyYW1ldGVyV2l0aFBhcmFtZXRlcjooVGVzdFBy
b3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyKXBhcmFtZXRl
cjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
clZhbHVlcy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZl
bnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxl
cjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7
Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PYmpDRW51
bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi0KLWlubGlu
ZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSB2YWx1
ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21h
aW5FbnVtU2hhcmVkOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJzaGFyZWQiKTsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtUmVkOgotICAgICAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCJyZWQiKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3Jl
ZW46Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImdyZWVuIik7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xUeXBlRG9tYWluRW51bUJsdWU6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwo
ImJsdWUiKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBUZXN0UHJvdG9jb2xUeXBl
RG9tYWluRW51bSBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAg
ICBpZiAodmFsdWUgPT0gInNoYXJlZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBl
RG9tYWluRW51bVNoYXJlZDsKLSAgICBpZiAodmFsdWUgPT0gInJlZCIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVJlZDsKLSAgICBpZiAodmFsdWUgPT0gImdyZWVu
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW47Ci0gICAg
aWYgKHZhbHVlID09ICJibHVlIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21h
aW5FbnVtQmx1ZTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gVGVzdFBy
b3RvY29sVHlwZURvbWFpbkVudW1TaGFyZWQ7Ci19Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3Rv
Y29sU3RyaW5nKFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5W
YWx1ZVJldHVyblZhbHVlIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2Ug
VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJu
VmFsdWVTaGFyZWQ6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInNoYXJlZCIpOwotICAg
IGNhc2UgVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVl
UmV0dXJuVmFsdWVDeWFuOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJjeWFuIik7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFs
dWVSZXR1cm5WYWx1ZU1hZ2VudGE6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIm1hZ2Vu
dGEiKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1S
ZXR1cm5WYWx1ZVJldHVyblZhbHVlWWVsbG93OgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFs
KCJ5ZWxsb3ciKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBUZXN0UHJvdG9jb2xD
b21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gInNo
YXJlZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdp
dGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZVNoYXJlZDsKLSAgICBpZiAodmFsdWUgPT0gImN5
YW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWVDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50
YSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhF
bnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZU1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxs
b3ciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWVZZWxsb3c7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1S
ZXR1cm5WYWx1ZVJldHVyblZhbHVlU2hhcmVkOwotfQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90
b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQ
YXJhbWV0ZXIgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXJTaGFyZWQ6Ci0g
ICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInNoYXJlZCIpOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyQmxhY2s6Ci0gICAg
ICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImJsYWNrIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xF
dmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXJXaGl0ZToKLSAgICAgICAg
cmV0dXJuIEFTQ0lJTGl0ZXJhbCgid2hpdGUiKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlu
bGluZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0
ZXIgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZh
bHVlID09ICJzaGFyZWQiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRXZlbnREb21haW5F
dmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyU2hhcmVkOwotICAgIGlmICh2YWx1ZSA9PSAi
YmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhF
bnVtUGFyYW1ldGVyUGFyYW1ldGVyQmxhY2s7Ci0gICAgaWYgKHZhbHVlID09ICJ3aGl0ZSIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0
ZXJQYXJhbWV0ZXJXaGl0ZTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
VGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyU2hh
cmVkOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51
bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQ
cml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUeXBlRG9tYWluRG9tYWluKQotCi0rICh2b2lkKV9w
YXJzZVR5cGVEb21haW5FbnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZDsKLQotQGVuZAotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMg
KENvbW1hbmREb21haW5Eb21haW4pCi0KLUBlbmQKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zIChFdmVudERvbWFpbkRvbWFpbikKLQotQGVuZAotCi1AaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUeXBlRG9tYWluRG9tYWluKQotCi0rICh2
b2lkKV9wYXJzZVR5cGVEb21haW5FbnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9h
ZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gQChJbnNwZWN0b3I6OmZyb21Q
cm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4ocGF5bG9hZCkpOwotfQot
Ci1AZW5kCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChDb21t
YW5kRG9tYWluRG9tYWluKQotCi1AZW5kCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zIChFdmVudERvbWFpbkRvbWFpbikKLQotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0t
dmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFt
ZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJl
c3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMxZDY4NGNlMzIwYmY3NTRlNmE2
YWM3Mzc3ZTE3YWMxN2Q1Y2NmNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysg
L2Rldi9udWxsCkBAIC0xLDExODMgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJh
Y2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50
cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEYXRhYmFzZS4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJEYXRhYmFzZURpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlz
cGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEYXRhYmFzZSIpOwotSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckV2ZW50KCJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJz
IiwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxv
YWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50
Q29sb3IiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRhdGFiYXNlLmRpZEV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGlt
ZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwg
ImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOwotSW5zcGVjdG9yQmFja2VuZC5hY3Rp
dmF0ZURvbWFpbigiRGF0YWJhc2UiKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRp
b25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2
b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNw
YXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0g
ICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4g
bV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2Vu
ZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMt
d2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRl
ICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2
ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotY2xhc3MgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNo
ZXIgewotcHVibGljOgotICAgIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91
dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7
IH0KLSAgICB2b2lkIGRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGNv
bnN0IG5vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IHRpbWVzdGFtcCwgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
PiBzcWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnMqIGNvbnN0IHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGNvbnN0IHBy
aW50Q29sb3IpOwotICAgIHZvaWQgZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBwYXls
b2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJv
ciwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMmIHNj
cmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlz
dD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpOwotcHJpdmF0ZToK
LSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNs
dWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgRGF0YWJhc2VGcm9udGVuZERp
c3BhdGNoZXI6OmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0
IG5vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IHRpbWVzdGFtcCwgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVl
PiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBz
cWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnMqIGNvbnN0IHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGNvbnN0IHByaW50
Q29sb3IpCi17Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQ
YXJhbWV0ZXJzIikpOwotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICBw
YXJhbXNPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1u
TmFtZXMpOwotICAgIGlmIChub3RlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJub3RlcyIpLCAqbm90ZXMpOwotICAgIGlmICh0aW1lc3RhbXApCi0gICAg
ICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksICp0
aW1lc3RhbXApOwotICAgIGlmICh2YWx1ZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2Jq
ZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZhbHVlcyk7Ci0gICAgaWYgKHBheWxvYWQpCi0g
ICAgICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksICpw
YXlsb2FkKTsKLSAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2Jq
ZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgc3FsRXJyb3IpOwotICAgIGlmIChzY3JlZW5D
b2xvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3Jl
ZW5Db2xvciIpLCAqc2NyZWVuQ29sb3IpOwotICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAg
ICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMi
KSwgYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAgcGFyYW1z
T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksICpwcmludENvbG9y
KTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIFdU
Rk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi12b2lkIERhdGFiYXNlRnJvbnRlbmRE
aXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5v
dGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IHZhbHVlcywgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyYgc2NyZWVuQ29sb3Is
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5h
dGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKLXsKLSAgICBSZWY8SW5zcGVjdG9y
T2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNv
bk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwo
IkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpKTsKLSAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBj
b2x1bW5OYW1lcyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJu
b3RlcyIpLCBub3Rlcyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFs
KCJ0aW1lc3RhbXAiKSwgdGltZXN0YW1wKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdChB
U0NJSUxpdGVyYWwoInZhbHVlcyIpLCB2YWx1ZXMpOwotICAgIHBhcmFtc09iamVjdC0+c2V0VmFs
dWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHBheWxvYWQpOwotICAgIHBhcmFtc09iamVjdC0+
c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgc3FsRXJyb3IpOwotICAgIHBhcmFt
c09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgc2NyZWVuQ29s
b3IpOwotICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVD
b2xvcnMiKSwgYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgcHJpbnRDb2xvcik7Ci0gICAganNvbk1lc3NhZ2Ut
PnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkp
OwotCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0
aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotLy8gRm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotY2xhc3MgRXJyb3I7Ci19IC8v
IERhdGFiYXNlCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotLy8gVHlwZWRl
ZnMuCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotLyogVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJh
c2Ugb2JqZWN0LiAqLwotdHlwZWRlZiBTdHJpbmcgRGF0YWJhc2VJZDsKLXR5cGVkZWYgU3RyaW5n
IFByaW1hcnlDb2xvcnM7Ci10eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBDb2xvckxpc3Q7Ci19IC8v
IERhdGFiYXNlCi0vLyBFbmQgb2YgdHlwZWRlZnMuCi0KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci0v
KiBEYXRhYmFzZSBlcnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRz
U2V0ID0gMCwKLSAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKLSAgICAgICAgQ29kZVNldCA9
IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQot
ICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0g
ICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7Ci0K
LSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0
YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRl
cihSZWY8LypFcnJvciovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDog
bV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7Ci0gICAgcHVi
bGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShj
b25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwot
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwg
dmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2
YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENv
ZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiY29kZSIpLCB2YWx1ZSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8RXJy
b3I+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fu
bm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBt
X3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZyZXN1bHQpKTsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8RXJy
b3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4p
Ci0gICAgICogICAgIC5zZXRDb2RlKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAg
Ki8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
KTsKLSAgICB9Ci19OwotCi19IC8vIERhdGFiYXNlCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBh
cmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgot
Ci0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0K
LX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9u
YWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
bHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgot
ewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAg
VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgKl9kYXRhYmFzZUV2ZW50
RGlzcGF0Y2hlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtz
dXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNT
RVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1
cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19kYXRhYmFzZUV2ZW50RGlz
cGF0Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKFRlc3RQcm90
b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyICopZGF0YWJhc2VFdmVudERpc3BhdGNo
ZXIKLXsKLSAgICBpZiAoIV9kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX2RhdGFi
YXNlRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlz
cGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1
cm4gX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBl
dmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2Nv
bC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZh
Y2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVy
ICpkYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZl
bnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsK
LXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250
cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRpZEV4ZWN1dGVPcHRpb25h
bFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKiljb2x1
bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3VibGUgKil0aW1l
c3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBheWxvYWQ6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2FkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yICoqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0cmluZyAqKilzY3JlZW5Db2xv
ciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilhbHRlcm5hdGVDb2xv
cnMgcHJpbnRDb2xvcjooTlNTdHJpbmcgKiopcHJpbnRDb2xvcgotewotICAgIGNvbnN0IEZyb250
ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywg
QCJjb2x1bW5OYW1lcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BB
UkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09Q
VElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxF
cnJvciIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihz
Y3JlZW5Db2xvciwgQCJzY3JlZW5Db2xvciIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHByaW50Q29s
b3IsIEAicHJpbnRDb2xvciIpOwotCi0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3Nh
Z2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJEYXRhYmFzZS5kaWRFeGVj
dXRlT3B0aW9uYWxQYXJhbWV0ZXJzIikpOwotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKGNvbHVtbk5hbWVz
KQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFt
ZXMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoKCpjb2x1bW5OYW1lcykpKTsKLSAgICBpZiAobm90
ZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMi
KSwgKCpub3RlcykpOwotICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgIHBhcmFtc09iamVjdC0+
c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksICgqdGltZXN0YW1wKSk7Ci0gICAg
aWYgKHZhbHVlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJ2YWx1ZXMiKSwgWygqdmFsdWVzKSB0b0luc3BlY3Rvck9iamVjdF0pOwotICAgIGlmIChwYXls
b2FkKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9h
ZCIpLCBbKCpwYXlsb2FkKSB0b0luc3BlY3Rvck9iamVjdF0pOwotICAgIGlmIChzcWxFcnJvcikK
LSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIp
LCBbKCpzcWxFcnJvcikgdG9JbnNwZWN0b3JPYmplY3RdKTsKLSAgICBpZiAoc2NyZWVuQ29sb3Ip
Ci0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29s
b3IiKSwgKCpzY3JlZW5Db2xvcikpOwotICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAg
IHBhcmFtc09iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwg
aW5zcGVjdG9yU3RyaW5nQXJyYXkoKCphbHRlcm5hdGVDb2xvcnMpKSk7Ci0gICAgaWYgKHByaW50
Q29sb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJp
bnRDb2xvciIpLCAoKnByaW50Q29sb3IpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgicGFyYW1zIiksIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0gICAgcm91dGVy
LnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi0tICh2b2lkKWRp
ZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5T
U3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1w
Oihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVz
IHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgc3FsRXJyb3I6KFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJpbmcgKilz
Y3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWFsdGVy
bmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKXByaW50Q29sb3IKLXsKLSAgICBjb25z
dCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7
Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5OYW1l
cywgQCJjb2x1bW5OYW1lcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFS
QU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc2NyZWVuQ29sb3IsIEAic2Ny
ZWVuQ29sb3IiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihh
bHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocHJpbnRDb2xvciwgQCJwcmludENvbG9yIik7Ci0KLSAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIp
LCBBU0NJSUxpdGVyYWwoIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIp
KTsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJj
b2x1bW5OYW1lcyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheShjb2x1bW5OYW1lcykpOwotICAgIHBh
cmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbm90ZXMpOwotICAg
IHBhcmFtc09iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHRpbWVz
dGFtcCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMi
KSwgW3ZhbHVlcyB0b0luc3BlY3Rvck9iamVjdF0pOwotICAgIHBhcmFtc09iamVjdC0+c2V0VmFs
dWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIFtwYXlsb2FkIHRvSW5zcGVjdG9yT2JqZWN0XSk7
Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBb
c3FsRXJyb3IgdG9JbnNwZWN0b3JPYmplY3RdKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmlu
ZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIHNjcmVlbkNvbG9yKTsKLSAgICBwYXJhbXNP
YmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIGluc3BlY3Rv
clN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBwcmludENvbG9yKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIFdURk1vdmUocGFyYW1zT2Jq
ZWN0KSk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNo
ZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOwotCi0K
LQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2Ug
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAq
KXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2Fn
ZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOwotLyogcmVxdWlyZWQgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOwotLyogcmVxdWlyZWQg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7Ci1AZW5kCi0KLQotCi1f
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFBy
b3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClk
aWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFt
cDooZG91YmxlICopdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZh
bHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopcGF5bG9hZCBzcWxFcnJvcjoo
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJp
bmcgKiopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5nICoqKXByaW50Q29sb3I7Ci0t
ICh2b2lkKWRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczooTlNB
cnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMg
dGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgc3FsRXJy
b3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNT
dHJpbmcgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKXByaW50Q29sb3I7Ci1A
ZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBv
cnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFi
YXNlRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
KWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFt
ZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMgKERhdGFiYXNlRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TU3Ry
aW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VQ
cmltYXJ5Q29sb3JzOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKLSsgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUVycm9yOihUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMg
KERhdGFiYXNlRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TU3RyaW5nICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUg
PSAoTlNTdHJpbmcgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6
KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAg
ICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZUNv
bG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
LXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25h
cnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
YWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2
ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotI2ltcG9ydCA8
d3RmL0Fzc2VydGlvbnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcgotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilw
YXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOwotICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRb
QCJtZXNzYWdlIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOwotICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0Ai
Y29kZSJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmpl
Y3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltq
c29uT2JqZWN0IHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmls
OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3Nh
Z2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQotewotICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKLQotICAgIHNl
bGYubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgc2VsZi5jb2RlID0gY29kZTsKLQotICAgIHJldHVy
biBzZWxmOwotfQotCi0tICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewot
ICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0g
KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAi
bWVzc2FnZSJdOwotfQotCi0tICh2b2lkKXNldENvZGU6KGludCljb2RlCi17Ci0gICAgW3N1cGVy
IHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Ci19Ci0KLS0gKGludCljb2RlCi17Ci0g
ICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOwotfQotCi1AZW5kCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9t
YWluLWF2YWlsYWJpbGl0eS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWF2YWlsYWJpbGl0eS5q
c29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGQ3MTk1ZDZhZDM2YTBk
NmJmN2E3YWJjNzQxNzZjMGYyODYwZmNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1hdmFpbGFiaWxpdHkuanNvbi1lcnJvcgorKysg
L2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmlj
YXRpb246IGF2YWlsYWJpbGl0eSBpcyBhbiB1bnN1cHBvcnRlZCBzdHJpbmcuIFdhczogIndlYmIi
LCBBbGxvd2VkIHZhbHVlczogd2ViCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFu
ZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1h
bmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggM2Y3NTZkZTMyNTA1MGMzM2E0OTJjZDUwZDllYWRmNDIzMDM1YjYxMC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUt
Y29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAg
LTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogY2FsbCBw
YXJhbWV0ZXIgbGlzdCBmb3IgY29tbWFuZCBwcm9jZXNzUG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFy
YW1ldGVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4t
cGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1
cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGVhMTQ4ZmY2N2M5NjA5NDg4YTgwZTZmYTI1ZDNiZmE3NzhmNWRhMGEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1h
bmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEg
KzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogcmV0dXJuIHBh
cmFtZXRlciBsaXN0IGZvciBjb21tYW5kIHByb2Nlc3NQb2ludHMgaGFzIGR1cGxpY2F0ZSBwYXJh
bWV0ZXIgbmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXIt
bmFtZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMu
anNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzcxYmJkMjFjMmNmMGMz
YjAzODAxZDk2MzdhNGU2ZDBmYzI1YWM0NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpz
b24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRv
bWFpbiBzcGVjaWZpY2F0aW9uOiBwYXJhbWV0ZXIgbGlzdCBmb3IgZXZlbnQgcHJvY2Vzc2VkUG9p
bnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBs
aWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBl
LWRlY2xhcmF0aW9ucy5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
NDdjZGY4ZTI4ZTg1NjYxMGEyNmY4MTU0OTQzZjM2Y2Y4YjdkMWY0Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xh
cmF0aW9ucy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IER1
cGxpY2F0ZSB0eXBlIGRlY2xhcmF0aW9uOiBSdW50aW1lLlJlbW90ZU9iamVjdElkCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbi1lcnJvciBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBkNTM3NmE3N2E0NTVmZDE1ZjY3ZDhiY2I5MzVhNmJhNDM4YzBhNTRjLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxp
Y2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAs
MCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdHlwZSBkZWNsYXJh
dGlvbiBmb3IgUG9pbnQgaGFzIGR1cGxpY2F0ZSBtZW1iZXIgbmFtZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12
YWx1ZXMuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY1NWMyYjkw
N2UwMmUzZTg0Y2IzZjY2ZmExZjU4ZTEzZDliN2I1My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJy
b3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogVHlwZSByZWZlcmVuY2Ugd2l0
aCBlbnVtIHZhbHVlcyBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGVudW0gdmFsdWUuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJv
ciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9y
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2IyYWYwZTQ3ZTkzZjgwNDk3OTQ0NDcy
NTdkZjMyNzIzZjA2ODI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVy
cm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFRoZSAnb3B0aW9uYWwnIGZs
YWcgZm9yIGEgcGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvciBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmRmMzc1MGMxYTc3OTc4OTNjYmZiN2UyODc2ZDkyY2Nl
Y2MyZjkxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCisrKyAvZGV2
L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgdHlw
ZSBtZW1iZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXN0
cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3Ry
aW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDk3YjJhZjBlNDdlOTNmODA0OTc5NDQ0NzI1N2RmMzI3MjNmMDY4
MjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24t
c3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IKKysrIC9kZXYv
bnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSBwYXJh
bWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXN0cmlu
Zy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5
cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDg2ZGYzNzUwYzFhNzc5Nzg5M2NiZmI3ZTI4NzZkOTJjY2VjYzJmOTEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5
cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSAr
MCwwIEBACi1FUlJPUjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSB0eXBlIG1lbWJlciBtdXN0
IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlv
bi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlv
bi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0MmY1NzUzYTQzOTYxNDRlYjU2NmM1YzU5NjhkMDQ5YWVjNjE4MmRiLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFy
YXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0x
ICswLDAgQEAKLUVSUk9SOiBUeXBlIHJlZmVyZW5jZSBjYW5ub3QgaGF2ZSBib3RoICd0eXBlJyBh
bmQgJyRyZWYnIGtleXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmlt
aXRpdmUtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZl
LXR5cGUuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc2YmMxYzc3
NzNhYTBkYTk4ODQ5YzkzYzM0YzM5MmYxNjI3NjM5OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUt
dHlwZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFR5cGUg
cmVmZXJlbmNlICdEYXRhYmFzZUlkJyBpcyBub3QgYSBwcmltaXRpdmUgdHlwZS4gQWxsb3dlZCB2
YWx1ZXM6IGludGVnZXIsIG51bWJlciwgc3RyaW5nLCBib29sZWFuLCBlbnVtLCBvYmplY3QsIGFy
cmF5LCBhbnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29u
LWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNDYyMjUwYzBhZjgwYTE3OWUwNmFhZjQ1ZDIxZWI1
NDZkYjg4MTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Zh
aWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApA
QCAtMSArMCwwIEBACi1FUlJPUjogVHlwZXMgbXVzdCBiZWdpbiB3aXRoIGFuIHVwcGVyY2FzZSBj
aGFyYWN0ZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5
cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2Ut
aW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAyZDM4ZTY0Njc1ZGE1YWU1YzI2M2Q1NDZlODUzNGI0OWYzYjVlOWM5Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1y
ZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAg
LTEgKzAsMCBAQAotRVJST1I6IFR5cGUgcmVmZXJlbmNlICdkcmFnb24nIGlzIG5vdCBhIHByaW1p
dGl2ZSB0eXBlLiBBbGxvd2VkIHZhbHVlczogaW50ZWdlciwgbnVtYmVyLCBzdHJpbmcsIGJvb2xl
YW4sIGVudW0sIG9iamVjdCwgYXJyYXksIGFueQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10
eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10
eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmYWY2NjcyY2JlZjA5NjMwZmQ5YmU4ZmZhZGFjZTEyYzU2MTFjY2E4Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25v
d24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvcgorKysgL2Rldi9udWxs
CkBAIC0xICswLDAgQEAKLUVSUk9SOiBMb29rdXAgZmFpbGVkIGZvciB0eXBlIHJlZmVyZW5jZTog
Q29sb3IgKHJlZmVyZW5jZWQgZnJvbSBkb21haW46IEZhbnRhc3kpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJh
dGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFp
bnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNzk0NjY2ZDJjZDlkMGE3OGIzNzUyN2Q2YzY4NmM0ZmJjZjkxMDE5My4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13
aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTIzMSAr
MCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1
cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotLy8gTmV0d29yazEuCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29y
azEubG9hZFJlc291cmNlIiwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21h
aW4oIk5ldHdvcmsxIik7Ci0KLS8vIE5ldHdvcmszLgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ck5ldHdvcmszRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNw
YXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIk5ldHdvcmszIik7Ci1JbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRXZlbnQoIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIiwgW10pOwotSW5zcGVj
dG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yazMiKTsKLSMjIyBFbmQgRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBn
ZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
VHlwZXMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1v
dmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRl
OgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07
Ci0KLQotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLWNsYXNzIEFsdGVybmF0ZU5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewot
cHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIo
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElkKSA9IDA7Ci19
OwotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0j
aWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0jZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpZiBQTEFURk9STShX
RUJfQ09NTUFORFMpCi1jbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYpID0gMDsK
LXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cigpOwotfTsKLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0KLSNpZiBQTEFURk9S
TShXRUJfQ09NTUFORFMpCi1jbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDog
cHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hl
ciYsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmpl
Y3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7Ci1wcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNl
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwot
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAg
IHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFs
dGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlm
Ci1wcml2YXRlOgotICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNo
ZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLSNlbmRpZiAv
LyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5k
aWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMp
Ci1OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCkgeyB9Ci0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotCi0j
aWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+
IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFj
a2VuZERpc3BhdGNoZXIsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKGJh
Y2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
OjpOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlz
cGF0Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDog
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBt
X2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0
Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIk5ldHdvcmsxIiksIHRoaXMpOwotfQotCi12b2lk
IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQotewotICAg
IFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0
KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9
PSAibG9hZFJlc291cmNlIikKLSAgICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJZCwgV1RGTW92
ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFr
ZVN0cmluZygnXCcnLCAiTmV0d29yazEiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIp
KTsKLX0KLQotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShyZXF1
ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZShlcnJvcik7Ci0KLSAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLSNlbmRpZiAvLyBQTEFURk9STShXRUJf
Q09NTUFORFMpCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Y2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLSNpZiBQTEFURk9STShXRUJfRVZFTlRTKQotY2xhc3Mg
TmV0d29yazNGcm9udGVuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIE5ldHdvcmszRnJvbnRl
bmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5k
Um91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICB2b2lkIHJlc291cmNlTG9hZGVkKCk7Ci1w
cml2YXRlOgotICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOwotfTsKLSNlbmRp
ZiAvLyBQTEFURk9STShXRUJfRVZFTlRTKQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMj
IyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJJbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLSNpZiBQTEFURk9STShXRUJfRVZFTlRTKQotdm9pZCBOZXR3
b3JrM0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQotewotICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0
ZXJhbCgiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiKSk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVy
LnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotI2VuZGlmIC8vIFBM
QVRGT1JNKFdFQl9FVkVOVFMpCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2Vu
ZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsK
LQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0jaWYgUExBVEZPUk0oV0VCX1RZUEVTKQotbmFt
ZXNwYWNlIE5ldHdvcmsyIHsKLWNsYXNzIE5ldHdvcmtFcnJvcjsKLX0gLy8gTmV0d29yazIKLSNl
bmRpZiAvLyBQTEFURk9STShXRUJfVFlQRVMpCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlv
bnMuCi0KLQotCi0KLSNpZiBQTEFURk9STShXRUJfVFlQRVMpCi1uYW1lc3BhY2UgTmV0d29yazIg
ewotY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAg
ICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKLSAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKLSAg
ICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToK
LSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypOZXR3
b3JrRXJyb3IqL0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVz
dWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtFcnJvcjsKLSAgICBw
dWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7
Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIp
LCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
Q29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1
bHQtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJjb2RlIiksIHZhbHVlKTsKLSAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxO
ZXR3b3JrRXJyb3I+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6ZW9mKEluc3Bl
Y3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIHJl
dHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJnJlc3Vs
dCkpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgotICAgICAqIFJlZjxOZXR3b3JrRXJyb3I+IHJlc3VsdCA9IE5ldHdvcmtFcnJvcjo6
Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29k
ZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxO
b0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAv
LyBOZXR3b3JrMgotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9UWVBFUykKLQotCi0KLX0gLy8gbmFt
ZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9t
YWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQ
cm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1n
dWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3Rv
Y29sTmV0d29yazFEb21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0j
aWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1f
ZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShsb25n
IHJlcXVlc3RJZCkgb3ZlcnJpZGU7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJv
dG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLSNlbmRpZiAvLyBQ
TEFURk9STShXRUJfQ09NTUFORFMpCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0
Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQot
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2Nv
bE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsKLSAgICBUZXN0UHJvdG9j
b2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX25ldHdvcmszRXZlbnREaXNwYXRjaGVy
OwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRd
OwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJv
bGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwot
fQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX25ldHdvcmsxSGFuZGxlciByZWxlYXNlXTsK
LSAgICBbX25ldHdvcmszRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFs
bG9jXTsKLX0KLQotLSAodm9pZClzZXROZXR3b3JrMUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5l
dHdvcmsxRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9uZXR3
b3JrMUhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfbmV0d29yazFIYW5kbGVyIHJl
bGVhc2VdOwotICAgIF9uZXR3b3JrMUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAg
YXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxPYmpDSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVB
Z2VudCA9IHN0ZDo6bWFrZV91bmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4+
KEFTQ0lJTGl0ZXJhbCgiTmV0d29yazEiKSwgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0
ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3Zl
KGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWlu
SGFuZGxlcj4pbmV0d29yazFIYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7
Ci19Ci0KLS0gKFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyICopbmV0
d29yazNFdmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9uZXR3b3JrM0V2ZW50RGlzcGF0Y2hl
cikKLSAgICAgICAgX25ldHdvcmszRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xOZXR3
b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250
cm9sbGVyXTsKLSAgICByZXR1cm4gX25ldHdvcmszRXZlbnREaXNwYXRjaGVyOwotfQotCi1AZW5k
Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkg
KCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNP
YmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXROZXR3b3JrMUhh
bmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IG5ldHdvcmsxSGFu
ZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sTmV0d29y
azNEb21haW5FdmVudERpc3BhdGNoZXIgKm5ldHdvcmszRXZlbnREaXNwYXRjaGVyOwotQGVuZAot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgot
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JW
YWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLSNpZiBQTEFURk9STShXRUJfQ09N
TUFORFMpCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNT
dHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9y
KTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAg
ICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxi
YWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0K
LSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0KLQotCi0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRo
LWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwotCi0KLQotCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrM0Rv
bWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6
KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKLXsKLSAgICBzZWxm
ID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAg
IHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXJlc291cmNlTG9hZGVkCi17Ci0gICAgY29uc3Qg
RnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwot
Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRo
b2QiKSwgQVNDSUlMaXRlcmFsKCJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCIpKTsKLSAgICByb3V0
ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3Qu
aD4KLQotCi1AY2xhc3MgVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3I7Ci0KLQotCi0K
LV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlk
PiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90
b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVz
c2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOwotLyogcmVxdWlyZWQgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOwotLyogcmVxdWly
ZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7Ci1AZW5kCi0KLUBw
cm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQHJl
cXVpcmVkCi0tICh2b2lkKWxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5T
U3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoKSlz
dWNjZXNzQ2FsbGJhY2s7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0
Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKXJlc291cmNlTG9hZGVkOwotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbElu
dGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21h
aW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclZhbHVlcy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWlu
RXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xs
ZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJk
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJy
YXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgT2JqQ0VudW1UeXBlPgotT2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKTsKLQotCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
ImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5o
IgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMgKE5ldHdvcmsxRG9tYWluKQotCi1AZW5kCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNl
TmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmszRG9tYWluKQotCi1AZW5kCi0KLUBpbXBsZW1lbnRh
dGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsxRG9tYWluKQotCi1AZW5k
Ci1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrMkRv
bWFpbikKLQotKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmsy
TmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNz
XSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciBh
bGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi1AaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrM0RvbWFpbikKLQotQGVuZAot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFs
dWVzLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwotCi0KLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sTmV0d29yazJOZXR3
b3JrRXJyb3IKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsK
LSAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOwotCi0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsK
LSAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0u
Z2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZToo
aW50KWNvZGUKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVz
c2FnZSwgQCJtZXNzYWdlIik7Ci0KLSAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIHNl
bGYuY29kZSA9IGNvZGU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRNZXNz
YWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2Ug
Zm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tIChOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBy
ZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAodm9pZClzZXRD
b2RlOihpbnQpY29kZQotewotICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29k
ZSJdOwotfQotCi0tIChpbnQpY29kZQotewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktl
eTpAImNvZGUiXTsKLX0KLQotQGVuZAotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1y
ZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZWQyYjc1NTZkNWE1NGM1MmY2YjVmNjc2YjYyOTVlYTIz
NzEyMjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUt
dHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEs
ODkxICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50
LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0j
IyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVm
UHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hl
ciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9
Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0
Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2lu
Y2x1ZGUgIkluc3BlY3RvckZyb250ZW5kUm91dGVyLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90
b2NvbCB7Ci0KLQotCi0vLyBUeXBlZGVmcy4KLW5hbWVzcGFjZSBSdW50aW1lIHsKLS8qIFVuaXF1
ZSBvYmplY3QgaWRlbnRpZmllci4gKi8KLXR5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOwot
fSAvLyBSdW50aW1lCi0KLW5hbWVzcGFjZSBSdW50aW1lMiB7Ci0vKiBVbmlxdWUgb2JqZWN0IGlk
ZW50aWZpZXIuICovCi10eXBlZGVmIFN0cmluZyBSZW1vdGVPYmplY3RJZDsKLX0gLy8gUnVudGlt
ZTIKLS8vIEVuZCBvZiB0eXBlZGVmcy4KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFt
ZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotCi0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVE
aXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxm
KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVh
bGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29s
Lmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
VmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi0K
LQotCi0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBl
LWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9iakNFbnVtVHlwZSBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLQotCi0KLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQt
ZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
UGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VS
ZW1vdGVPYmplY3RJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7Ci0KLUBlbmQKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50
aW1lMkRvbWFpbikKLQotKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNTdHJpbmcgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKLQotKyAodm9p
ZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU1N0cmluZyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBheWxvYWQ7
Ci19Ci0KLUBlbmQKLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMg
KFJ1bnRpbWUyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU1N0cmlu
ZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgKm91dFZh
bHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlw
ZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbXBvcnQgPHd0Zi9Bc3Nl
cnRpb25zLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9u
YWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVy
cy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFhNWExMWQ0Mzcw
YjRkYjA3OGRmNDM3MjVkNGI0NmMzZjY0OWUwOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVz
dWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTA5MyArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25h
bC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZv
aWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3Bh
dGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAg
ICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0K
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRv
d2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNs
YXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQg
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9u
YWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotLy8gRm9yd2FyZCBkZWNs
YXJhdGlvbnMuCi1uYW1lc3BhY2UgUnVudGltZSB7Ci1jbGFzcyBLZXlQYXRoOwotfSAvLyBSdW50
aW1lCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0KLW5hbWVzcGFjZSBU
ZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1W
YWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50
PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotbmFtZXNw
YWNlIFJ1bnRpbWUgewotLyogS2V5IHBhdGguICovCi1jbGFzcyBLZXlQYXRoIDogcHVibGljIElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgLy8gTmFtZWQgYWZ0
ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBLZXlQYXRoLgotICAgIGVu
dW0gY2xhc3MgVHlwZSB7Ci0gICAgICAgIE51bGwgPSAwLAotICAgICAgICBTdHJpbmcgPSAxLAot
ICAgICAgICBBcnJheSA9IDIsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBUeXBlCi0gICAgZW51bSB7
Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgVHlwZVNldCA9IDEgPDwgMCwKLSAg
ICAgICAgQWxsRmllbGRzU2V0ID0gKFR5cGVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKktleVBhdGgqL0luc3BlY3Rv
ck9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0
KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZnJpZW5kIGNsYXNzIEtleVBhdGg7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShUeXBlIHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoInR5cGUiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKHZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8S2V5UGF0aD4gcmVsZWFzZSgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoS2V5
UGF0aCkgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAg
ICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51
bGwoKTsKLSAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxL
ZXlQYXRoPio+KCZyZXN1bHQpKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8S2V5UGF0aD4gcmVzdWx0ID0gS2V5
UGF0aDo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldFR5cGUoLi4uKQotICAgICAqICAgICAucmVs
ZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi0gICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJzdHJpbmciKSwgdmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQgc2V0QXJy
YXkoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IHZhbHVlKQotICAg
IHsKLSAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJh
cnJheSIpLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotfTsKLQotfSAvLyBSdW50aW1lCi0KLQot
Ci1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVu
dW1UeXBlPgotc3RkOjpvcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9t
YWluCi10ZW1wbGF0ZTw+Ci1zdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihjb25zdCBTdHJpbmcmKTsKLQotfSAvLyBu
YW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRlc3RIZWxw
ZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10g
PSB7Ci0gICAgIm51bGwiLAotICAgICJzdHJpbmciLAotICAgICJhcnJheSIsCi19OwotCi1TdHJp
bmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKLSAgICByZXR1cm4gZW51bV9jb25z
dGFudF92YWx1ZXNbY29kZV07Ci19Ci0KLS8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWlu
Ci10ZW1wbGF0ZTw+Ci1zdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OktleVBhdGg6OlR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5n
KQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpO
dWxsLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBh
dGg6OlR5cGU6OlN0cmluZywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpLZXlQYXRoOjpUeXBlOjpBcnJheSwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgMzsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25z
dGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlKWNvbnN0YW50VmFsdWVzW2ld
OwotCi0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBUZXN0
SGVscGVycwotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgot
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRv
d2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRy
b2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIg
aW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChj
b250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQot
QGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgi
ZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2Jq
ZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0
dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvclZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5t
bQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5
cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1t
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24v
Rm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0Lmg+Ci0KLQotQGNsYXNzIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoOwotCi0KLXR5cGVk
ZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSkgewot
ICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZU51bGwsCi0gICAgVGVzdFByb3RvY29s
UnVudGltZUtleVBhdGhUeXBlU3RyaW5nLAotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRo
VHlwZUFycmF5LAotfTsKLQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGggOiBSV0lQcm90b2NvbEpT
T05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxO
U1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9i
amVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlOwotLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sUnVu
dGltZUtleVBhdGhUeXBlIHR5cGU7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFycmF5OwotQGVuZAotCi0KLQot
Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNo
YWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10
eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29s
U3RyaW5nKFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSB2YWx1ZSkKLXsKLSAgICBzd2l0
Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZU51bGw6
Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIm51bGwiKTsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZVN0cmluZzoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJh
bCgic3RyaW5nIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVBcnJh
eToKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYXJyYXkiKTsKLSAgICB9Ci19Ci0KLXRl
bXBsYXRlPD4KLWlubGluZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUgZnJvbVByb3Rv
Y29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJudWxs
IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZU51bGw7Ci0g
ICAgaWYgKHZhbHVlID09ICJzdHJpbmciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVu
dGltZUtleVBhdGhUeXBlU3RyaW5nOwotICAgIGlmICh2YWx1ZSA9PSAiYXJyYXkiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlQXJyYXk7Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlw
ZU51bGw7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
aGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9t
YWluKQotCi0rICh2b2lkKV9wYXJzZUtleVBhdGg6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRo
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0KLSsg
KHZvaWQpX3BhcnNlS2V5UGF0aDooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGggKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBb
W1Rlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9h
ZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclZhbHVlcy5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sUnVudGlt
ZUtleVBhdGgKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidHlwZSJdLCBAInR5cGUiKTsKLSAgICBz
ZWxmLnR5cGUgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhU
eXBlPihwYXlsb2FkW0AidHlwZSJdKTsKLQotICAgIHNlbGYuc3RyaW5nID0gcGF5bG9hZFtAInN0
cmluZyJdOwotCi0gICAgc2VsZi5hcnJheSA9IG9iamNBcnJheUZyb21QYXlsb2FkPE5TU3RyaW5n
PihwYXlsb2FkW0AiYXJyYXkiXSk7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmpl
Y3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltq
c29uT2JqZWN0IHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmls
OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFR5cGU6
KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlCi17Ci0gICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBzZWxmLnR5cGUgPSB0
eXBlOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0VHlwZTooVGVzdFByb3Rv
Y29sUnVudGltZUtleVBhdGhUeXBlKXR5cGUKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOnRvUHJv
dG9jb2xTdHJpbmcodHlwZSkgZm9yS2V5OkAidHlwZSJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xS
dW50aW1lS2V5UGF0aFR5cGUpdHlwZQotewotICAgIHJldHVybiBmcm9tUHJvdG9jb2xTdHJpbmc8
VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPihbc3VwZXIgc3RyaW5nRm9yS2V5OkAidHlw
ZSJdKTsKLX0KLQotLSAodm9pZClzZXRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAg
W3N1cGVyIHNldFN0cmluZzpzdHJpbmcgZm9yS2V5OkAic3RyaW5nIl07Ci19Ci0KLS0gKE5TU3Ry
aW5nICopc3RyaW5nCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJzdHJpbmci
XTsKLX0KLQotLSAodm9pZClzZXRBcnJheTooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYXJyYXkK
LXsKLSAgICBbc3VwZXIgc2V0SW5zcGVjdG9yQXJyYXk6aW5zcGVjdG9yU3RyaW5nQXJyYXkoYXJy
YXkpIGZvcktleTpAImFycmF5Il07Ci19Ci0KLS0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWFy
cmF5Ci17Ci0gICAgcmV0dXJuIG9iamNTdHJpbmdBcnJheShbc3VwZXIgaW5zcGVjdG9yQXJyYXlG
b3JLZXk6QCJhcnJheSJdKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZl
LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBl
Lmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjdkNTAxYjM4Yzk1
NDQyYjk4NzlmMDQ4NGM5NzgwNWM5NDU2OGFhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUu
anNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSw4NjIgKzAsMCBAQAotIyMjIEJlZ2luIEZp
bGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0jIyMgRW5kIEZpbGU6IElu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxC
YWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBX
VEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJp
dmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7
Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFs
aWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBG
cm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQot
Ci0vLyBUeXBlZGVmcy4KLW5hbWVzcGFjZSBSdW50aW1lIHsKLS8qIFVuaXF1ZSBvYmplY3QgaWRl
bnRpZmllci4gKi8KLXR5cGVkZWYgaW50IFJlbW90ZU9iamVjdElkOwotfSAvLyBSdW50aW1lCi0v
LyBFbmQgb2YgdHlwZWRlZnMuCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUt
dHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAv
LyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRy
b2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIg
aW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChj
b250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQot
QGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
biA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
YWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
RXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
YWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLQotCi0K
LQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1P
YmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21h
aW4pCi0KLSsgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNl
UmVtb3RlT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1i
ZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwotfQotCi1A
ZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
Y29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JWYWx1ZXMuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBjNDY3ZmFjZDVlYzgxZTVlZmNjNGFhYWUxZWQyZWY1N2ZmZDRlMmM1Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDM1ICswLDAgQEAK
LSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEZWJ1Z2dlci4K
LUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEZWJ1Z2dlci5SZWFzb24iLCB7RGllZDog
IkRpZWQiLCBGYWludGVkOiAiRmFpbnRlZCIsIEh1bmdyeTogIkh1bmdyeSJ9KTsKLSMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
VHlwZXMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1v
dmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRl
OgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07
Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYK
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJJbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotLy8gRm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgRGVidWdnZXIgewotZW51bSBjbGFzcyBSZWFzb247
Ci19IC8vIERlYnVnZ2VyCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotLy8g
VHlwZWRlZnMuCi1uYW1lc3BhY2UgRGVidWdnZXIgewotdHlwZWRlZiBpbnQgQnJlYWtwb2ludElk
OwotfSAvLyBEZWJ1Z2dlcgotCi1uYW1lc3BhY2UgUnVudGltZSB7Ci10eXBlZGVmIGludCBPYmpl
Y3RJZDsKLXR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8aW50PiBMdWNreU51bWJl
cnM7Ci10eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4gQmFieU5hbWVz
OwotdHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpPYmplY3RJZD4gTmV3T2JqZWN0czsKLXR5cGVkZWYgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZD4g
T2xkT2JqZWN0czsKLXR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gU3RvcFJlYXNvbnM7Ci19IC8vIFJ1bnRpbWUK
LS8vIEVuZCBvZiB0eXBlZGVmcy4KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5n
IGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
U3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQotewotICAgIHJldHVybiBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi1uYW1lc3BhY2UgRGVidWdnZXIgewotLyogICov
Ci1lbnVtIGNsYXNzIFJlYXNvbiB7Ci0gICAgRGllZCA9IDAsCi0gICAgRmFpbnRlZCA9IDEsCi0g
ICAgSHVuZ3J5ID0gMiwKLX07IC8vIGVudW0gY2xhc3MgUmVhc29uCi19IC8vIERlYnVnZ2VyCi0K
LQotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2Nv
bEVudW1UeXBlPgotc3RkOjpvcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVudW1zIGluIHRoZSAnRGVidWdnZXIn
IERvbWFpbgotdGVtcGxhdGU8Pgotc3RkOjpvcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpE
ZWJ1Z2dlcjo6UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4oY29uc3QgU3RyaW5nJik7Ci0KLX0gLy8gbmFtZXNwYWNl
IFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewotICAgICJE
aWVkIiwKLSAgICAiRmFpbnRlZCIsCi0gICAgIkh1bmdyeSIsCi19OwotCi1TdHJpbmcgZ2V0RW51
bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKLSAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1
ZXNbY29kZV07Ci19Ci0KLS8vIEVudW1zIGluIHRoZSAnRGVidWdnZXInIERvbWFpbgotdGVtcGxh
dGU8Pgotc3RkOjpvcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29u
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6
OlJlYXNvbj4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6RGllZCwKLSAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpGYWludGVkLAotICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246Okh1bmdyeSwKLSAgICB9
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQotICAgICAgICBpZiAocHJvdG9j
b2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAg
ICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uKWNv
bnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQotCi19IC8v
IG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1h
cnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwot
ICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVh
bGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXkt
dHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi0KLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERp
c3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERp
c3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZv
dW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVz
dFByb3RvY29sRGVidWdnZXJSZWFzb24pIHsKLSAgICBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNv
bkRpZWQsCi0gICAgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25GYWludGVkLAotICAgIFRlc3RQ
cm90b2NvbERlYnVnZ2VyUmVhc29uSHVuZ3J5LAotfTsKLQotCi0KLQotCi0KLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1
ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJz
aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2Jq
Q0VudW1UeXBlPgotT2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKTsKLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29s
RGVidWdnZXJSZWFzb24gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkRpZWQ6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVy
YWwoIkRpZWQiKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRmFpbnRlZDoK
LSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiRmFpbnRlZCIpOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sRGVidWdnZXJSZWFzb25IdW5ncnk6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwo
Ikh1bmdyeSIpOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIFRlc3RQcm90b2NvbERl
YnVnZ2VyUmVhc29uIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewot
ICAgIGlmICh2YWx1ZSA9PSAiRGllZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEZWJ1
Z2dlclJlYXNvbkRpZWQ7Ci0gICAgaWYgKHZhbHVlID09ICJGYWludGVkIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRmFpbnRlZDsKLSAgICBpZiAodmFsdWUgPT0g
Ikh1bmdyeSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkh1bmdy
eTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gVGVzdFByb3RvY29sRGVi
dWdnZXJSZWFzb25EaWVkOwotfQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMg
KERlYnVnZ2VyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUJyZWFrcG9pbnRJZDooTlNOdW1iZXIg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVJlYXNv
bjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQK
LUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQot
Ci0rICh2b2lkKV9wYXJzZU9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlTHVja3lOdW1iZXJzOihOU0FycmF5Lyo8TlNO
dW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9w
YXJzZUJhYnlOYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VOZXdPYmplY3RzOihOU0FycmF5Lyo8TlNO
dW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9w
YXJzZU9sZE9iamVjdHM6KE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlU3RvcFJlYXNvbnM6KE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAot
Ci1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEZWJ1Z2dlckRv
bWFpbikKLQotKyAodm9pZClfcGFyc2VCcmVha3BvaW50SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNOdW1i
ZXIgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVJlYXNvbjooTlNOdW1iZXIgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IEAo
SW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGVidWdnZXJSZWFzb24+
KHBheWxvYWQpKTsKLX0KLQotQGVuZAotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VPYmplY3RJZDooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOwotICAgICpv
dXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlTHVja3lO
dW1iZXJzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U0FycmF5Lyo8TlNOdW1iZXI+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8q
PE5TTnVtYmVyPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VCYWJ5TmFtZXM6KE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAot
ewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxO
U1N0cmluZz4qLyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZU5ld09iamVjdHM6KE5TQXJyYXkvKjxO
U051bWJlcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU051bWJlcj4q
LyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKilwYXls
b2FkOwotfQotCi0rICh2b2lkKV9wYXJzZU9sZE9iamVjdHM6KE5TQXJyYXkvKjxOU051bWJlcj4q
LyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU051bWJlcj4qLyBjbGFzc10p
OwotICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKilwYXlsb2FkOwotfQot
Ci0rICh2b2lkKV9wYXJzZVN0b3BSZWFzb25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKLSAgICAq
b3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKLX0KLQotQGVuZAot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0j
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTY0
MDA1ZGQ4ODBhNjBkYjkzMTgzODkyZGYxNTkyMDg0ZGU0NDJkLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29u
LXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEwMzcgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gUnVudGltZS4KLUluc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJFbnVtKCJSdW50aW1lLkZhcm1BbmltYWxzIiwge1BpZ3M6ICJQaWdzIiwgQ293czog
IkNvd3MiLCBDYXRzOiAiQ2F0cyIsIEhlbnM6ICJIZW5zIn0pOwotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckVudW0oIlJ1bnRpbWUuVHdvTGVnZ2VkQW5pbWFscyIsIHtEdWNrczogIkR1Y2tzIiwg
SGVuczogIkhlbnMiLCBDcm93czogIkNyb3dzIiwgRmxhbWluZ29zOiAiRmxhbWluZ29zIn0pOwot
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0
cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIg
PSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmRE
aXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQot
cHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNo
ZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNl
bmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJJbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0vLyBGb3J3
YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBSdW50aW1lIHsKLWVudW0gY2xhc3MgRmFybUFu
aW1hbHM7Ci1lbnVtIGNsYXNzIFR3b0xlZ2dlZEFuaW1hbHM7Ci19IC8vIFJ1bnRpbWUKLS8vIEVu
ZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJz
IHsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQotewot
ICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1
ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi1uYW1lc3BhY2UgUnVudGlt
ZSB7Ci0vKiAgKi8KLWVudW0gY2xhc3MgRmFybUFuaW1hbHMgewotICAgIFBpZ3MgPSAwLAotICAg
IENvd3MgPSAxLAotICAgIENhdHMgPSAyLAotICAgIEhlbnMgPSAzLAotfTsgLy8gZW51bSBjbGFz
cyBGYXJtQW5pbWFscwotLyogICovCi1lbnVtIGNsYXNzIFR3b0xlZ2dlZEFuaW1hbHMgewotICAg
IER1Y2tzID0gNCwKLSAgICBIZW5zID0gMywKLSAgICBDcm93cyA9IDUsCi0gICAgRmxhbWluZ29z
ID0gNiwKLX07IC8vIGVudW0gY2xhc3MgVHdvTGVnZ2VkQW5pbWFscwotfSAvLyBSdW50aW1lCi0K
LQotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2Nv
bEVudW1UeXBlPgotc3RkOjpvcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0KLS8vIEVudW1zIGluIHRoZSAnUnVudGltZScg
RG9tYWluCi10ZW1wbGF0ZTw+Ci1zdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwotdGVtcGxhdGU8
Pgotc3RkOjpvcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRB
bmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6VHdvTGVnZ2VkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7Ci0KLX0gLy8gbmFtZXNwYWNl
IFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Ci0gICAgIlBp
Z3MiLAotICAgICJDb3dzIiwKLSAgICAiQ2F0cyIsCi0gICAgIkhlbnMiLAotICAgICJEdWNrcyIs
Ci0gICAgIkNyb3dzIiwKLSAgICAiRmxhbWluZ29zIiwKLX07Ci0KLVN0cmluZyBnZXRFbnVtQ29u
c3RhbnRWYWx1ZShpbnQgY29kZSkgewotICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tj
b2RlXTsKLX0KLQotLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KLXRlbXBsYXRlPD4K
LXN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpG
YXJtQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OlBpZ3MsCi0gICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNvd3MsCi0gICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNh
dHMsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFu
aW1hbHM6OkhlbnMsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkK
LSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0
YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6RmFybUFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotfQotCi10ZW1wbGF0ZTw+Ci1zdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBT
dHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3Rh
bnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpUd29MZWdnZWRBbmltYWxzOjpEdWNrcywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpIZW5zLAotICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkNyb3dz
LAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dl
ZEFuaW1hbHM6OkZsYW1pbmdvcywKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
NDsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1
ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwotCi0g
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVy
cwotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsK
LSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlm
ICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0g
ICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2
b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90
b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRl
cmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVz
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLQotdHlwZWRlZiBOU19F
TlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzKSB7Ci0gICAgVGVz
dFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzUGlncywKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1l
RmFybUFuaW1hbHNDb3dzLAotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0NhdHMs
Ci0gICAgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzSGVucywKLX07Ci0KLXR5cGVkZWYg
TlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzKSB7
Ci0gICAgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNEdWNrcywKLSAgICBUZXN0
UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0hlbnMsCi0gICAgVGVzdFByb3RvY29sUnVu
dGltZVR3b0xlZ2dlZEFuaW1hbHNDcm93cywKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVn
Z2VkQW5pbWFsc0ZsYW1pbmdvcywKLX07Ci0KLQotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10
eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQot
Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+
Ci1PYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwot
Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xSdW50aW1lRmFy
bUFuaW1hbHMgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFs
KCJQaWdzIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDb3dzOgot
ICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJDb3dzIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xSdW50aW1lRmFybUFuaW1hbHNDYXRzOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJD
YXRzIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNIZW5zOgotICAg
ICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJIZW5zIik7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+
Ci1pbmxpbmUgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzIGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiUGlncyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzOwotICAgIGlmICh2
YWx1ZSA9PSAiQ293cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFu
aW1hbHNDb3dzOwotICAgIGlmICh2YWx1ZSA9PSAiQ2F0cyIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDYXRzOwotICAgIGlmICh2YWx1ZSA9PSAiSGVucyIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNIZW5zOwotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lRmFy
bUFuaW1hbHNQaWdzOwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFBy
b3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHMgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVl
KSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0R1Y2tzOgot
ICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJEdWNrcyIpOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNIZW5zOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRl
cmFsKCJIZW5zIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFs
c0Nyb3dzOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJDcm93cyIpOwotICAgIGNhc2Ug
VGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNGbGFtaW5nb3M6Ci0gICAgICAgIHJl
dHVybiBBU0NJSUxpdGVyYWwoIkZsYW1pbmdvcyIpOwotICAgIH0KLX0KLQotdGVtcGxhdGU8Pgot
aW5saW5lIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzIGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiRHVja3MiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNEdWNrczsK
LSAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVu
dGltZVR3b0xlZ2dlZEFuaW1hbHNIZW5zOwotICAgIGlmICh2YWx1ZSA9PSAiQ3Jvd3MiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNDcm93czsKLSAg
ICBpZiAodmFsdWUgPT0gIkZsYW1pbmdvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xS
dW50aW1lVHdvTGVnZ2VkQW5pbWFsc0ZsYW1pbmdvczsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNEdWNrczsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKLQotKyAo
dm9pZClfcGFyc2VGYXJtQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVR3b0xlZ2dlZEFuaW1hbHM6KE5TTnVtYmVyICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRh
dGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZv
aWQpX3BhcnNlRmFybUFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNTdHJpbmcgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBAKEluc3BlY3Rvcjo6ZnJvbVByb3Rv
Y29sU3RyaW5nPFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFscz4ocGF5bG9hZCkpOwotfQot
Ci0rICh2b2lkKV9wYXJzZVR3b0xlZ2dlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQ
RShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBAKEluc3BlY3Rv
cjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxz
PihwYXlsb2FkKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0K
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0t
dHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBhOWMwNjZmNDAzODdlMzI0NWJhN2FlN2RhZDRjNzMzZGZjMzhi
MDNhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRl
Y2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTk5
MyArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3Qt
dHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0jIyMg
RW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8
QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0g
V1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlz
cGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXBy
aXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVy
OwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgot
I2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJJ
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0K
LS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLWNsYXNzIEVy
cm9yOwotY2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU7Ci1jbGFzcyBQYXJhbWV0ZXJCdW5k
bGU7Ci1jbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOwotY2xhc3MgRHVtbXlP
YmplY3Q7Ci19IC8vIERhdGFiYXNlCi0KLW5hbWVzcGFjZSBUZXN0IHsKLWNsYXNzIFBhcmFtZXRl
ckJ1bmRsZTsKLX0gLy8gVGVzdAotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0K
LS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLXR5cGVkZWYgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBFcnJv
ckxpc3Q7Ci19IC8vIERhdGFiYXNlCi0vLyBFbmQgb2YgdHlwZWRlZnMuCi0KLW5hbWVzcGFjZSBE
YXRhYmFzZSB7Ci0vKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVibGljIElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKLSAgICAg
ICAgQ29kZVNldCA9IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQg
fCBDb2RlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3Mg
QnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgQnVpbGRlcihSZWY8LypFcnJvciovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKLSAg
ICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgRXJy
b3I7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYg
c2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxy
ZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
Im1lc3NhZ2UiKSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdl
U2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBz
ZXRDb2RlKGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiY29kZSIpLCB2YWx1ZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9y
T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgcmV0dXJu
IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZyZXN1bHQpKTsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAg
ICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0
TWVzc2FnZSguLi4pCi0gICAgICogICAgIC5zZXRDb2RlKC4uLikKLSAgICAgKiAgICAgLnJlbGVh
c2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi1jbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRs
ZSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgewotcHVibGljOgotICAg
IGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9
IDAKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIg
ewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0
OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1
aWxkZXIoUmVmPC8qT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUqL0luc3BlY3Rvck9iamVjdD4mJiBv
YmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5k
IGNsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOwotICAgIHB1YmxpYzoKLQotICAgICAgICBS
ZWY8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0g
ICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNl
Tm9uTnVsbCgpOwotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPio+KCZyZXN1bHQpKTsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
OjpjcmVhdGUoKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLQotICAg
IHZvaWQgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz4+IHZhbHVlKQotICAgIHsKLSAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0QXJy
YXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQot
Ci0gICAgdm9pZCBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
SW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgdmFs
dWUpOwotICAgIH0KLQotICAgIHZvaWQgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRp
bWVzdGFtcCIpLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRWYWx1ZXMoUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEluc3BlY3Rv
ck9iamVjdEJhc2U6OnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBXVEZNb3ZlKHZh
bHVlKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRQYXlsb2FkKFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6
OnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAg
fQotCi0gICAgdm9pZCBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNl
dE9iamVjdChBU0NJSUxpdGVyYWwoImVycm9yIiksIFdURk1vdmUodmFsdWUpKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHNldEVycm9yTGlzdChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yTGlzdD4gdmFsdWUpCi0gICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNl
OjpzZXRBcnJheShBU0NJSUxpdGVyYWwoImVycm9yTGlzdCIpLCBXVEZNb3ZlKHZhbHVlKSk7Ci0g
ICAgfQotfTsKLQotY2xhc3MgUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRz
U2V0ID0gMCwKLSAgICAgICAgQ29sdW1uTmFtZXNTZXQgPSAxIDw8IDAsCi0gICAgICAgIE5vdGVz
U2V0ID0gMSA8PCAxLAotICAgICAgICBUaW1lc3RhbXBTZXQgPSAxIDw8IDIsCi0gICAgICAgIFZh
bHVlc1NldCA9IDEgPDwgMywKLSAgICAgICAgUGF5bG9hZFNldCA9IDEgPDwgNCwKLSAgICAgICAg
RXJyb3JTZXQgPSAxIDw8IDUsCi0gICAgICAgIEVycm9yTGlzdFNldCA9IDEgPDwgNiwKLSAgICAg
ICAgQWxsRmllbGRzU2V0ID0gKENvbHVtbk5hbWVzU2V0IHwgTm90ZXNTZXQgfCBUaW1lc3RhbXBT
ZXQgfCBWYWx1ZXNTZXQgfCBQYXlsb2FkU2V0IHwgRXJyb3JTZXQgfCBFcnJvckxpc3RTZXQpCi0g
ICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAg
ICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKLQot
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVy
KFJlZjwvKlBhcmFtZXRlckJ1bmRsZSovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKLSAgICAg
ICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgUGFyYW1l
dGVyQnVuZGxlOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1u
TmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlf
c2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVt
bk5hbWVzIiksIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFt
ZXNTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+
JiBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90
ZXMiKSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb3Rlc1NldD4oKTsK
LSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+JiBzZXRU
aW1lc3RhbXAoZG91YmxlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVGltZXN0YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVhZHlf
c2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1l
c3RhbXAiKSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBT
ZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYg
c2V0VmFsdWVzKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBw
cm9wZXJ0eV92YWx1ZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9i
amVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFZhbHVlc1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9hZChSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZT4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7Ci0gICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHZhbHVlKTsK
LSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJv
cl9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0
ZXJhbCgiZXJyb3IiKSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJv
clNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvckxpc3RT
ZXQ+JiBzZXRFcnJvckxpc3QoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvckxpc3Q+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgRXJyb3JMaXN0U2V0KSwgcHJvcGVydHlfZXJyb3JMaXN0X2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImVycm9yTGlzdCIp
LCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yTGlzdFNldD4oKTsK
LSAgICAgICAgfQotCi0gICAgICAgIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQs
IHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9m
KFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0
KTsKLQotICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQu
cmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJl
dF9jYXN0PFJlZjxQYXJhbWV0ZXJCdW5kbGU+Kj4oJnJlc3VsdCkpOwotICAgICAgICB9Ci0gICAg
fTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxQ
YXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCkKLSAgICAg
KiAgICAgLnNldENvbHVtbk5hbWVzKC4uLikKLSAgICAgKiAgICAgLnNldE5vdGVzKC4uLikKLSAg
ICAgKiAgICAgLnNldFRpbWVzdGFtcCguLi4pCi0gICAgICogICAgIC5zZXRWYWx1ZXMoLi4uKQot
ICAgICAqICAgICAuc2V0UGF5bG9hZCguLi4pCi0gICAgICogICAgIC5zZXRFcnJvciguLi4pCi0g
ICAgICogICAgIC5zZXRFcnJvckxpc3QoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAg
ICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCkpOwotICAgIH0KLX07Ci0KLS8qIENvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRl
ZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JPYmplY3Qg
bWV0aG9kcy4gKi8KLWNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgOiBwdWJs
aWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsK
LSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBJbnRlZ2VyU2V0ID0gMSA8PCAwLAot
ICAgICAgICBBcnJheVNldCA9IDEgPDwgMSwKLSAgICAgICAgU3RyaW5nU2V0ID0gMSA8PCAyLAot
ICAgICAgICBWYWx1ZVNldCA9IDEgPDwgMywKLSAgICAgICAgT2JqZWN0U2V0ID0gMSA8PCA0LAot
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAoSW50ZWdlclNldCB8IEFycmF5U2V0IHwgU3RyaW5nU2V0
IHwgVmFsdWVTZXQgfCBPYmplY3RTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKk9iamVjdFdpdGhQcm9wZXJ0eU5hbWVD
b25mbGljdHMqL0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVz
dWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5h
bWVDb25mbGljdHM7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJbnRl
Z2VyU2V0PiYgc2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSW50ZWdlclNldCksIHByb3BlcnR5X2lu
dGVnZXJfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoImludGVnZXIiKSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxJbnRlZ2VyU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFy
cmF5U2V0PiYgc2V0QXJyYXkoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFycmF5U2V0KSwgcHJvcGVydHlfYXJyYXlf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoImFycmF5IiksIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QXJyYXlT
ZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYg
c2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHJpbmdTZXQpLCBwcm9wZXJ0eV9zdHJpbmdfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInN0
cmluZyIpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0cmluZ1NldD4o
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZVNldD4mIHNldFZh
bHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBWYWx1ZVNldCksIHByb3BlcnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJ2YWx1ZSIpLCB2
YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlU2V0PigpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE9iamVjdFNldD4mIHNldE9iamVjdChjb25z
dCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgT2JqZWN0U2V0KSwgcHJvcGVydHlfb2JqZWN0X2FscmVhZHlfc2V0KTsKLSAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJvYmplY3QiKSwgdmFsdWUp
OwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPYmplY3RTZXQ+KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBSZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4gcmVsZWFzZSgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxk
c1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChz
aXplb2YoT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cykgPT0gc2l6ZW9mKEluc3BlY3Rv
ck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIHJldHVy
biBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29u
ZmxpY3RzPio+KCZyZXN1bHQpKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cz4gcmVzdWx0ID0gT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czo6Y3Jl
YXRlKCkKLSAgICAgKiAgICAgLnNldEludGVnZXIoLi4uKQotICAgICAqICAgICAuc2V0QXJyYXko
Li4uKQotICAgICAqICAgICAuc2V0U3RyaW5nKC4uLikKLSAgICAgKiAgICAgLnNldFZhbHVlKC4u
LikKLSAgICAgKiAgICAgLnNldE9iamVjdCguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0g
ICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewot
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBEYXRhYmFzZQotCi1uYW1lc3BhY2UgVGVzdCB7Ci1j
bGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RC
YXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAg
ICAgICBDb2x1bW5OYW1lc1NldCA9IDEgPDwgMCwKLSAgICAgICAgTm90ZXNTZXQgPSAxIDw8IDEs
Ci0gICAgICAgIFRpbWVzdGFtcFNldCA9IDEgPDwgMiwKLSAgICAgICAgVmFsdWVzU2V0ID0gMSA8
PCAzLAotICAgICAgICBQYXlsb2FkU2V0ID0gMSA8PCA0LAotICAgICAgICBFcnJvclNldCA9IDEg
PDwgNSwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKENvbHVtbk5hbWVzU2V0IHwgTm90ZXNTZXQg
fCBUaW1lc3RhbXBTZXQgfCBWYWx1ZXNTZXQgfCBQYXlsb2FkU2V0IHwgRXJyb3JTZXQpCi0gICAg
fTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBw
cml2YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKLQotICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJl
ZjwvKlBhcmFtZXRlckJ1bmRsZSovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAg
ICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgUGFyYW1ldGVy
QnVuZGxlOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFt
ZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
U3RyaW5nPj4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5h
bWVzIiksIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNT
ZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBz
ZXROb3Rlcyhjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMi
KSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb3Rlc1NldD4oKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+JiBzZXRUaW1l
c3RhbXAoZG91YmxlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgVGltZXN0YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3Rh
bXAiKSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0
VmFsdWVzKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9w
ZXJ0eV92YWx1ZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVj
dChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFZhbHVlc1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9hZChSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZT4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBQYXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHZhbHVlKTsKLSAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9h
bHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgiZXJyb3IiKSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNl
dD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2Uo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVs
ZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
c2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5v
dF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9y
ZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWlu
dGVycHJldF9jYXN0PFJlZjxQYXJhbWV0ZXJCdW5kbGU+Kj4oJnJlc3VsdCkpOwotICAgICAgICB9
Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAq
IFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCkK
LSAgICAgKiAgICAgLnNldENvbHVtbk5hbWVzKC4uLikKLSAgICAgKiAgICAgLnNldE5vdGVzKC4u
LikKLSAgICAgKiAgICAgLnNldFRpbWVzdGFtcCguLi4pCi0gICAgICogICAgIC5zZXRWYWx1ZXMo
Li4uKQotICAgICAqICAgICAuc2V0UGF5bG9hZCguLi4pCi0gICAgICogICAgIC5zZXRFcnJvcigu
Li4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBU
ZXN0Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
bmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2Jq
ZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwot
ICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVh
bGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0
LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uIDogTlNPYmplY3QKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLQot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
OwotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU7Ci1A
Y2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGU7Ci1AY2xhc3MgVGVzdFBy
b3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOwotQGNsYXNzIFRl
c3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3Q7Ci1AY2xhc3MgVGVzdFByb3RvY29sVGVzdFBh
cmFtZXRlckJ1bmRsZTsKLQotCi0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1
bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2Nv
bEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFy
eTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNP
Tk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsK
LS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVz
c2FnZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBj
b2RlOwotQGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBp
bnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSA6IFJX
SVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNE
aWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLyog
b3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqY29sdW1uTmFtZXM7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywg
Y29weSkgTlNTdHJpbmcgKm5vdGVzOwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIGFzc2lnbikgZG91YmxlIHRpbWVzdGFtcDsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzOwotLyogb3B0
aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICpwYXlsb2FkOwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFp
bikgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqZXJyb3I7Ci0vKiBvcHRpb25hbCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3I+Ki8gKmVycm9yTGlzdDsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxl
IDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2Fk
OihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5n
PiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3Vi
bGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxv
YWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZXJyb3I6KFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgKillcnJvciBlcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yPiovICopZXJyb3JMaXN0OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXM7Ci0vKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm5vdGVzOwotLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIHRpbWVzdGFt
cDsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqdmFsdWVzOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkOwotLyogcmVxdWlyZWQg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciAqZXJyb3I7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNB
cnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKmVycm9yTGlzdDsKLUBlbmQKLQot
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyA6IFJXSVByb3Rv
Y29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9u
YXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhK
U09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoSW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyIGFycmF5OihOU1N0cmlu
ZyAqKWFycmF5IHN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgdmFsdWU6KE5TU3RyaW5nICopdmFs
dWUgb2JqZWN0OihOU1N0cmluZyAqKW9iamVjdDsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqaW50ZWdlcjsKLS8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqYXJyYXk7Ci0vKiByZXF1aXJlZCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKLS8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqdmFsdWU7Ci0vKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm9iamVjdDsKLUBl
bmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNl
IFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgOiBSV0lQcm90b2NvbEpTT05PYmplY3QK
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAq
LCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RQYXJh
bWV0ZXJCdW5kbGUgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
anNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbHVtbk5hbWVzOihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1l
c3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2
YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXM7Ci0v
KiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm5vdGVz
OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIHRp
bWVzdGFtcDsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkOwotLyogcmVx
dWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciAqZXJyb3I7Ci1AZW5kCi0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLQotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1P
YmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi0K
LQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1A
aW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0K
LSsgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUVycm9yTGlzdDooTlNB
cnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOihU
ZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRl
c3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxp
Y3RzOihUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUR1bW15
T2JqZWN0OihUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0ICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoVGVzdERvbWFpbikKLQotKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6
KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
LXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25h
cnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
YWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotKyAodm9pZClfcGFyc2VFcnJv
ckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gY2xh
c3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3I+Ki8gKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZU9wdGlvbmFsUGFyYW1ldGVyQnVu
ZGxlOihUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0g
W1tUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIGFsbG9jXSBpbml0
V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLSsgKHZvaWQpX3BhcnNlUGFyYW1ldGVyQnVuZGxl
OihUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5
bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3Rv
Y29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGUgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2Fk
XTsKLX0KLQotKyAodm9pZClfcGFyc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOihU
ZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUg
PSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyBh
bGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi0rICh2b2lkKV9wYXJzZUR1bW15
T2JqZWN0OihUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0ICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJv
dG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0IGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07
Ci19Ci0KLUBlbmQKLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMg
KFRlc3REb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9j
b2xUZXN0UGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
Ci17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9u
YXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVy
QnVuZGxlIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbXBv
cnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQot
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IKLQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+
ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICBy
ZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShw
YXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKLSAgICBzZWxmLm1lc3NhZ2UgPSBwYXls
b2FkW0AibWVzc2FnZSJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKLSAgICBzZWxmLmNvZGUgPSBbcGF5bG9h
ZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29u
T2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9iamVj
dDpbanNvbk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhN
ZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKLXsKLSAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7Ci0KLSAg
ICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIHNlbGYuY29kZSA9IGNvZGU7Ci0KLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UK
LXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwotfQot
Ci0tIChOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zvcktl
eTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQotewotICAgIFtz
dXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOwotfQotCi0tIChpbnQpY29kZQot
ewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKLX0KLQotQGVuZAot
Ci1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlv
bmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBzZWxmLmNvbHVtbk5hbWVzID0g
b2JqY0FycmF5RnJvbVBheWxvYWQ8TlNTdHJpbmc+KHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdKTsK
LQotICAgIHNlbGYubm90ZXMgPSBwYXlsb2FkW0Aibm90ZXMiXTsKLQotICAgIHNlbGYudGltZXN0
YW1wID0gW3BheWxvYWRbQCJ0aW1lc3RhbXAiXSBkb3VibGVWYWx1ZV07Ci0KLSAgICBzZWxmLnZh
bHVlcyA9IHBheWxvYWRbQCJ2YWx1ZXMiXTsKLQotICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWRb
QCJwYXlsb2FkIl07Ci0KLSAgICBzZWxmLmVycm9yID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAImVycm9yIl1dOwotCi0gICAgc2Vs
Zi5lcnJvckxpc3QgPSBvYmpjQXJyYXlGcm9tUGF5bG9hZDxUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yPihwYXlsb2FkW0AiZXJyb3JMaXN0Il0pOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilq
c29uT2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9i
amVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldENvbHVtbk5hbWVz
OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcwotewotICAgIFtzdXBlciBzZXRJ
bnNwZWN0b3JBcnJheTppbnNwZWN0b3JTdHJpbmdBcnJheShjb2x1bW5OYW1lcykgZm9yS2V5OkAi
Y29sdW1uTmFtZXMiXTsKLX0KLQotLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFt
ZXMKLXsKLSAgICByZXR1cm4gb2JqY1N0cmluZ0FycmF5KFtzdXBlciBpbnNwZWN0b3JBcnJheUZv
cktleTpAImNvbHVtbk5hbWVzIl0pOwotfQotCi0tICh2b2lkKXNldE5vdGVzOihOU1N0cmluZyAq
KW5vdGVzCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpub3RlcyBmb3JLZXk6QCJub3RlcyJdOwot
fQotCi0tIChOU1N0cmluZyAqKW5vdGVzCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JL
ZXk6QCJub3RlcyJdOwotfQotCi0tICh2b2lkKXNldFRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFt
cAotewotICAgIFtzdXBlciBzZXREb3VibGU6dGltZXN0YW1wIGZvcktleTpAInRpbWVzdGFtcCJd
OwotfQotCi0tIChkb3VibGUpdGltZXN0YW1wCi17Ci0gICAgcmV0dXJuIFtzdXBlciBkb3VibGVG
b3JLZXk6QCJ0aW1lc3RhbXAiXTsKLX0KLQotLSAodm9pZClzZXRWYWx1ZXM6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKXZhbHVlcwotewotICAgIFtzdXBlciBzZXRPYmplY3Q6dmFsdWVzIGZvcktl
eTpAInZhbHVlcyJdOwotfQotCi0tIChSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKLXsK
LSAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSW5zcGVj
dG9yT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl0gdG9JbnNwZWN0b3JPYmpl
Y3RdLmdldCgpXTsKLX0KLQotLSAodm9pZClzZXRQYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKilwYXlsb2FkCi17Ci0gICAgW3N1cGVyIHNldE9iamVjdDpwYXlsb2FkIGZvcktleTpAInBh
eWxvYWQiXTsKLX0KLQotLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAotewotICAg
IHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JP
YmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl0gdG9JbnNwZWN0b3JPYmplY3Rd
LmdldCgpXTsKLX0KLQotLSAodm9pZClzZXRFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciAqKWVycm9yCi17Ci0gICAgW3N1cGVyIHNldE9iamVjdDplcnJvciBmb3JLZXk6QCJlcnJvciJd
OwotfQotCi0tIChUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKLXsKLSAgICByZXR1
cm4gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9i
amVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl0gdG9JbnNwZWN0b3JPYmplY3RdLmdl
dCgpXTsKLX0KLQotLSAodm9pZClzZXRFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Ci17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRV9JTl9BUlJBWShlcnJvckxpc3QsIFtUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGNs
YXNzXSk7Ci0gICAgW3N1cGVyIHNldEluc3BlY3RvckFycmF5Omluc3BlY3Rvck9iamVjdEFycmF5
KGVycm9yTGlzdCkgZm9yS2V5OkAiZXJyb3JMaXN0Il07Ci19Ci0KLS0gKE5TQXJyYXkvKjxUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Ci17Ci0gICAgcmV0dXJuIG9iamNB
cnJheTxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPihbc3VwZXIgaW5zcGVjdG9yQXJyYXlGb3JL
ZXk6QCJlcnJvckxpc3QiXSk7Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90
b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBh
eWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsK
LSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvbHVt
bk5hbWVzIl0sIEAiY29sdW1uTmFtZXMiKTsKLSAgICBzZWxmLmNvbHVtbk5hbWVzID0gb2JqY0Fy
cmF5RnJvbVBheWxvYWQ8TlNTdHJpbmc+KHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdKTsKLQotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm5vdGVzIl0s
IEAibm90ZXMiKTsKLSAgICBzZWxmLm5vdGVzID0gcGF5bG9hZFtAIm5vdGVzIl07Ci0KLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0aW1lc3RhbXAi
XSwgQCJ0aW1lc3RhbXAiKTsKLSAgICBzZWxmLnRpbWVzdGFtcCA9IFtwYXlsb2FkW0AidGltZXN0
YW1wIl0gZG91YmxlVmFsdWVdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AidmFsdWVzIl0sIEAidmFsdWVzIik7Ci0gICAgc2VsZi52YWx1ZXMg
PSBwYXlsb2FkW0AidmFsdWVzIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWRbQCJwYXlsb2FkIl0sIEAicGF5bG9hZCIpOwotICAgIHNlbGYucGF5
bG9hZCA9IHBheWxvYWRbQCJwYXlsb2FkIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJlcnJvciJdLCBAImVycm9yIik7Ci0gICAgc2VsZi5l
cnJvciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2Fk
OnBheWxvYWRbQCJlcnJvciJdXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkocGF5bG9hZFtAImVycm9yTGlzdCJdLCBAImVycm9yTGlzdCIpOwotICAgIHNlbGYu
ZXJyb3JMaXN0ID0gb2JqY0FycmF5RnJvbVBheWxvYWQ8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
cj4ocGF5bG9hZFtAImVycm9yTGlzdCJdKTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNv
bk9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnNwZWN0b3JPYmpl
Y3Q6W2pzb25PYmplY3QgdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihO
U1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3Qg
KilwYXlsb2FkIGVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IgZXJyb3JM
aXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAot
ewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShjb2x1bW5OYW1lcywg
QCJjb2x1bW5OYW1lcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkobm90ZXMsIEAibm90ZXMiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUFJPUEVSVFkoZXJyb3IsIEAiZXJyb3IiKTsKLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGVycm9yTGlzdCwgQCJlcnJvckxpc3QiKTsKLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFX0lOX0FSUkFZKGVycm9yTGlzdCwgW1Rlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgY2xhc3NdKTsKLQotICAgIHNlbGYuY29sdW1uTmFtZXMgPSBjb2x1
bW5OYW1lczsKLSAgICBzZWxmLm5vdGVzID0gbm90ZXM7Ci0gICAgc2VsZi50aW1lc3RhbXAgPSB0
aW1lc3RhbXA7Ci0gICAgc2VsZi52YWx1ZXMgPSB2YWx1ZXM7Ci0gICAgc2VsZi5wYXlsb2FkID0g
cGF5bG9hZDsKLSAgICBzZWxmLmVycm9yID0gZXJyb3I7Ci0gICAgc2VsZi5lcnJvckxpc3QgPSBl
cnJvckxpc3Q7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRDb2x1bW5OYW1l
czooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKLXsKLSAgICBbc3VwZXIgc2V0
SW5zcGVjdG9yQXJyYXk6aW5zcGVjdG9yU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpIGZvcktleTpA
ImNvbHVtbk5hbWVzIl07Ci19Ci0KLS0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5h
bWVzCi17Ci0gICAgcmV0dXJuIG9iamNTdHJpbmdBcnJheShbc3VwZXIgaW5zcGVjdG9yQXJyYXlG
b3JLZXk6QCJjb2x1bW5OYW1lcyJdKTsKLX0KLQotLSAodm9pZClzZXROb3RlczooTlNTdHJpbmcg
Kilub3RlcwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6bm90ZXMgZm9yS2V5OkAibm90ZXMiXTsK
LX0KLQotLSAoTlNTdHJpbmcgKilub3RlcwotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9y
S2V5OkAibm90ZXMiXTsKLX0KLQotLSAodm9pZClzZXRUaW1lc3RhbXA6KGRvdWJsZSl0aW1lc3Rh
bXAKLXsKLSAgICBbc3VwZXIgc2V0RG91YmxlOnRpbWVzdGFtcCBmb3JLZXk6QCJ0aW1lc3RhbXAi
XTsKLX0KLQotLSAoZG91YmxlKXRpbWVzdGFtcAotewotICAgIHJldHVybiBbc3VwZXIgZG91Ymxl
Rm9yS2V5OkAidGltZXN0YW1wIl07Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWVzOihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKil2YWx1ZXMKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OnZhbHVlcyBmb3JL
ZXk6QCJ2YWx1ZXMiXTsKLX0KLQotLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCi17
Ci0gICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEluc3Bl
Y3Rvck9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdIHRvSW5zcGVjdG9yT2Jq
ZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0UGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopcGF5bG9hZAotewotICAgIFtzdXBlciBzZXRPYmplY3Q6cGF5bG9hZCBmb3JLZXk6QCJw
YXlsb2FkIl07Ci19Ci0KLS0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKLXsKLSAg
ICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9y
T2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdIHRvSW5zcGVjdG9yT2JqZWN0
XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0RXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgKillcnJvcgotewotICAgIFtzdXBlciBzZXRPYmplY3Q6ZXJyb3IgZm9yS2V5OkAiZXJyb3Ii
XTsKLX0KLQotLSAoVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17Ci0gICAgcmV0
dXJuIFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JP
YmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdIHRvSW5zcGVjdG9yT2JqZWN0XS5n
ZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0RXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX1RZUEVfSU5fQVJSQVkoZXJyb3JMaXN0LCBbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBj
bGFzc10pOwotICAgIFtzdXBlciBzZXRJbnNwZWN0b3JBcnJheTppbnNwZWN0b3JPYmplY3RBcnJh
eShlcnJvckxpc3QpIGZvcktleTpAImVycm9yTGlzdCJdOwotfQotCi0tIChOU0FycmF5Lyo8VGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAotewotICAgIHJldHVybiBvYmpj
QXJyYXk8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4oW3N1cGVyIGluc3BlY3RvckFycmF5Rm9y
S2V5OkAiZXJyb3JMaXN0Il0pOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMKLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwg
aWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAg
ICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0AiaW50ZWdlciJdLCBAImludGVnZXIiKTsKLSAgICBzZWxmLmludGVnZXIgPSBw
YXlsb2FkW0AiaW50ZWdlciJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AiYXJyYXkiXSwgQCJhcnJheSIpOwotICAgIHNlbGYuYXJyYXkgPSBw
YXlsb2FkW0AiYXJyYXkiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAInN0cmluZyJdLCBAInN0cmluZyIpOwotICAgIHNlbGYuc3RyaW5nID0g
cGF5bG9hZFtAInN0cmluZyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AidmFsdWUiXSwgQCJ2YWx1ZSIpOwotICAgIHNlbGYudmFsdWUgPSBw
YXlsb2FkW0AidmFsdWUiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAIm9iamVjdCJdLCBAIm9iamVjdCIpOwotICAgIHNlbGYub2JqZWN0ID0g
cGF5bG9hZFtAIm9iamVjdCJdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0
Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbanNv
bk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJbnRlZ2Vy
OihOU1N0cmluZyAqKWludGVnZXIgYXJyYXk6KE5TU3RyaW5nICopYXJyYXkgc3RyaW5nOihOU1N0
cmluZyAqKXN0cmluZyB2YWx1ZTooTlNTdHJpbmcgKil2YWx1ZSBvYmplY3Q6KE5TU3RyaW5nICop
b2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGludGVn
ZXIsIEAiaW50ZWdlciIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkoYXJyYXksIEAiYXJyYXkiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHN0cmluZywgQCJzdHJpbmciKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHZhbHVlLCBAInZhbHVlIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShvYmplY3QsIEAib2JqZWN0Iik7Ci0KLSAgICBzZWxmLmludGVnZXIg
PSBpbnRlZ2VyOwotICAgIHNlbGYuYXJyYXkgPSBhcnJheTsKLSAgICBzZWxmLnN0cmluZyA9IHN0
cmluZzsKLSAgICBzZWxmLnZhbHVlID0gdmFsdWU7Ci0gICAgc2VsZi5vYmplY3QgPSBvYmplY3Q7
Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRJbnRlZ2VyOihOU1N0cmluZyAq
KWludGVnZXIKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOmludGVnZXIgZm9yS2V5OkAiaW50ZWdl
ciJdOwotfQotCi0tIChOU1N0cmluZyAqKWludGVnZXIKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0
cmluZ0ZvcktleTpAImludGVnZXIiXTsKLX0KLQotLSAodm9pZClzZXRBcnJheTooTlNTdHJpbmcg
KilhcnJheQotewotICAgIFtzdXBlciBzZXRTdHJpbmc6YXJyYXkgZm9yS2V5OkAiYXJyYXkiXTsK
LX0KLQotLSAoTlNTdHJpbmcgKilhcnJheQotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9y
S2V5OkAiYXJyYXkiXTsKLX0KLQotLSAodm9pZClzZXRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5n
Ci17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpzdHJpbmcgZm9yS2V5OkAic3RyaW5nIl07Ci19Ci0K
LS0gKE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6
QCJzdHJpbmciXTsKLX0KLQotLSAodm9pZClzZXRWYWx1ZTooTlNTdHJpbmcgKil2YWx1ZQotewot
ICAgIFtzdXBlciBzZXRTdHJpbmc6dmFsdWUgZm9yS2V5OkAidmFsdWUiXTsKLX0KLQotLSAoTlNT
dHJpbmcgKil2YWx1ZQotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAidmFsdWUi
XTsKLX0KLQotLSAodm9pZClzZXRPYmplY3Q6KE5TU3RyaW5nICopb2JqZWN0Ci17Ci0gICAgW3N1
cGVyIHNldFN0cmluZzpvYmplY3QgZm9yS2V5OkAib2JqZWN0Il07Ci19Ci0KLS0gKE5TU3RyaW5n
ICopb2JqZWN0Ci17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJvYmplY3QiXTsK
LX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9i
amVjdAotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlv
bmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KWpzb25PYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSW5zcGVjdG9y
T2JqZWN0Oltqc29uT2JqZWN0IHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICBy
ZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLUBlbmQKLQotCi1AaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZQotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilw
YXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJjb2x1bW5OYW1lcyJdLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgc2VsZi5jb2x1bW5OYW1l
cyA9IG9iamNBcnJheUZyb21QYXlsb2FkPE5TU3RyaW5nPihwYXlsb2FkW0AiY29sdW1uTmFtZXMi
XSk7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRb
QCJub3RlcyJdLCBAIm5vdGVzIik7Ci0gICAgc2VsZi5ub3RlcyA9IHBheWxvYWRbQCJub3RlcyJd
OwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Ai
dGltZXN0YW1wIl0sIEAidGltZXN0YW1wIik7Ci0gICAgc2VsZi50aW1lc3RhbXAgPSBbcGF5bG9h
ZFtAInRpbWVzdGFtcCJdIGRvdWJsZVZhbHVlXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInZhbHVlcyJdLCBAInZhbHVlcyIpOwotICAgIHNl
bGYudmFsdWVzID0gcGF5bG9hZFtAInZhbHVlcyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AicGF5bG9hZCJdLCBAInBheWxvYWQiKTsKLSAg
ICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkW0AicGF5bG9hZCJdOwotCi0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiZXJyb3IiXSwgQCJlcnJvciIpOwot
ICAgIHNlbGYuZXJyb3IgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRX
aXRoUGF5bG9hZDpwYXlsb2FkW0AiZXJyb3IiXV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KWpzb25PYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSW5zcGVjdG9y
T2JqZWN0Oltqc29uT2JqZWN0IHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICBy
ZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3Rl
czooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihS
V0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17
Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0K
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGNvbHVtbk5hbWVzLCBA
ImNvbHVtbk5hbWVzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShub3RlcywgQCJub3RlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkodmFsdWVzLCBAInZhbHVlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShlcnJvciwgQCJlcnJvciIpOwotCi0gICAgc2VsZi5jb2x1bW5O
YW1lcyA9IGNvbHVtbk5hbWVzOwotICAgIHNlbGYubm90ZXMgPSBub3RlczsKLSAgICBzZWxmLnRp
bWVzdGFtcCA9IHRpbWVzdGFtcDsKLSAgICBzZWxmLnZhbHVlcyA9IHZhbHVlczsKLSAgICBzZWxm
LnBheWxvYWQgPSBwYXlsb2FkOwotICAgIHNlbGYuZXJyb3IgPSBlcnJvcjsKLQotICAgIHJldHVy
biBzZWxmOwotfQotCi0tICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKiljb2x1bW5OYW1lcwotewotICAgIFtzdXBlciBzZXRJbnNwZWN0b3JBcnJheTppbnNwZWN0
b3JTdHJpbmdBcnJheShjb2x1bW5OYW1lcykgZm9yS2V5OkAiY29sdW1uTmFtZXMiXTsKLX0KLQot
LSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKLXsKLSAgICByZXR1cm4gb2Jq
Y1N0cmluZ0FycmF5KFtzdXBlciBpbnNwZWN0b3JBcnJheUZvcktleTpAImNvbHVtbk5hbWVzIl0p
OwotfQotCi0tICh2b2lkKXNldE5vdGVzOihOU1N0cmluZyAqKW5vdGVzCi17Ci0gICAgW3N1cGVy
IHNldFN0cmluZzpub3RlcyBmb3JLZXk6QCJub3RlcyJdOwotfQotCi0tIChOU1N0cmluZyAqKW5v
dGVzCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJub3RlcyJdOwotfQotCi0t
ICh2b2lkKXNldFRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcAotewotICAgIFtzdXBlciBzZXRE
b3VibGU6dGltZXN0YW1wIGZvcktleTpAInRpbWVzdGFtcCJdOwotfQotCi0tIChkb3VibGUpdGlt
ZXN0YW1wCi17Ci0gICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0aW1lc3RhbXAiXTsK
LX0KLQotLSAodm9pZClzZXRWYWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcwot
ewotICAgIFtzdXBlciBzZXRPYmplY3Q6dmFsdWVzIGZvcktleTpAInZhbHVlcyJdOwotfQotCi0t
IChSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKLXsKLSAgICByZXR1cm4gW1tSV0lQcm90
b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltbc3VwZXIgb2Jq
ZWN0Rm9yS2V5OkAidmFsdWVzIl0gdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXTsKLX0KLQotLSAo
dm9pZClzZXRQYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCi17Ci0gICAg
W3N1cGVyIHNldE9iamVjdDpwYXlsb2FkIGZvcktleTpAInBheWxvYWQiXTsKLX0KLQotLSAoUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAotewotICAgIHJldHVybiBbW1JXSVByb3RvY29s
SlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W1tzdXBlciBvYmplY3RG
b3JLZXk6QCJwYXlsb2FkIl0gdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXTsKLX0KLQotLSAodm9p
ZClzZXRFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17Ci0gICAgW3N1
cGVyIHNldE9iamVjdDplcnJvciBmb3JLZXk6QCJlcnJvciJdOwotfQotCi0tIChUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICopZXJyb3IKLXsKLSAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbW3N1cGVyIG9iamVjdEZv
cktleTpAImVycm9yIl0gdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXTsKLX0KLQotQGVuZAotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVp
cmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxZmQyYWM4MWQ1
ZWNmNGVkNjdkNjFkYzlkMDEyNGY4ZGI0MmI1OTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1
bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNTg4ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gVGVzdC4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJFbnVtKCJUZXN0LlVuY2FzdGVkQW5pbWFscyIsIHtQaWdzOiAiUGlncyIsIENvd3M6ICJDb3dz
IiwgQ2F0czogIkNhdHMiLCBIZW5zOiAiSGVucyJ9KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJFbnVtKCJUZXN0LkNhc3RlZEFuaW1hbHMiLCB7RHVja3M6ICJEdWNrcyIsIEhlbnM6ICJIZW5z
IiwgQ3Jvd3M6ICJDcm93cyIsIEZsYW1pbmdvczogIkZsYW1pbmdvcyJ9KTsKLSMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5
cGVzLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
IHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3Zl
KGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVy
KCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToK
LSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19Owot
Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5n
LXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
LSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYK
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIkluc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotLy8gRm9y
d2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgVGVzdCB7Ci1jbGFzcyBUeXBlTmVlZGluZ0Nh
c3Q7Ci1jbGFzcyBSZWN1cnNpdmVPYmplY3QxOwotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MjsKLWVu
dW0gY2xhc3MgVW5jYXN0ZWRBbmltYWxzOwotZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzOwotfSAv
LyBUZXN0Ci0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotLy8gVHlwZWRlZnMu
Ci1uYW1lc3BhY2UgVGVzdCB7Ci10eXBlZGVmIGludCBDYXN0ZWRPYmplY3RJZDsKLXR5cGVkZWYg
aW50IFVuY2FzdGVkT2JqZWN0SWQ7Ci19IC8vIFRlc3QKLS8vIEVuZCBvZiB0eXBlZGVmcy4KLQot
bmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGlu
dCBjb2RlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZh
bHVlKFQgZW51bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0
aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVy
cwotCi1uYW1lc3BhY2UgVGVzdCB7Ci0vKiBBIGR1bW15IHR5cGUgdGhhdCByZXF1aXJlcyBydW50
aW1lIGNhc3RzLCBhbmQgZm9yY2VzIG5vbi1wcmltaXRpdmUgcmVmZXJlbmNlZCB0eXBlcyB0byBh
bHNvIGVtaXQgcnVudGltZSBjYXN0IGhlbHBlcnMuICovCi1jbGFzcyBUeXBlTmVlZGluZ0Nhc3Qg
OiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBl
bnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBTdHJpbmdTZXQgPSAxIDw8
IDAsCi0gICAgICAgIE51bWJlclNldCA9IDEgPDwgMSwKLSAgICAgICAgQW5pbWFsc1NldCA9IDEg
PDwgMiwKLSAgICAgICAgSWRTZXQgPSAxIDw8IDMsCi0gICAgICAgIFRyZWVTZXQgPSAxIDw8IDQs
Ci0gICAgICAgIEFsbEZpZWxkc1NldCA9IChTdHJpbmdTZXQgfCBOdW1iZXJTZXQgfCBBbmltYWxz
U2V0IHwgSWRTZXQgfCBUcmVlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypUeXBlTmVlZGluZ0Nhc3QqL0luc3BlY3Rv
ck9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0
KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZnJpZW5kIGNsYXNzIFR5cGVOZWVkaW5nQ2FzdDsKLSAgICBwdWJsaWM6Ci0KLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3Ry
aW5nU2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzdHJpbmciKSwgdmFsdWUpOwotICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHJpbmdTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgTnVtYmVyU2V0PiYgc2V0TnVtYmVyKGludCB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE51bWJlclNldCksIHByb3Bl
cnR5X251bWJlcl9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdl
cihBU0NJSUxpdGVyYWwoIm51bWJlciIpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPE51bWJlclNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBBbmltYWxzU2V0PiYgc2V0QW5pbWFscyhJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0
ZWRBbmltYWxzIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgQW5pbWFsc1NldCksIHByb3BlcnR5X2FuaW1hbHNfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImFuaW1hbHMiKSwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVl
KSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFuaW1hbHNTZXQ+KCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+JiBzZXRJZChpbnQgdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJZFNldCksIHBy
b3BlcnR5X2lkX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2Vy
KEFTQ0lJTGl0ZXJhbCgiaWQiKSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxJZFNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUcmVlU2V0
PiYgc2V0VHJlZShSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2Jq
ZWN0MT4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBUcmVlU2V0KSwgcHJvcGVydHlfdHJlZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidHJlZSIpLCB2YWx1ZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFRyZWVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBS
ZWY8VHlwZU5lZWRpbmdDYXN0PiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
LSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihUeXBlTmVlZGluZ0Nhc3QpID09IHNp
emVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8VHlwZU5lZWRpbmdD
YXN0Pio+KCZyZXN1bHQpKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8VHlwZU5lZWRpbmdDYXN0PiByZXN1bHQg
PSBUeXBlTmVlZGluZ0Nhc3Q6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRTdHJpbmcoLi4uKQot
ICAgICAqICAgICAuc2V0TnVtYmVyKC4uLikKLSAgICAgKiAgICAgLnNldEFuaW1hbHMoLi4uKQot
ICAgICAqICAgICAuc2V0SWQoLi4uKQotICAgICAqICAgICAuc2V0VHJlZSguLi4pCi0gICAgICog
ICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotLyogICovCi1lbnVtIGNsYXNz
IFVuY2FzdGVkQW5pbWFscyB7Ci0gICAgUGlncyA9IDQsCi0gICAgQ293cyA9IDUsCi0gICAgQ2F0
cyA9IDYsCi0gICAgSGVucyA9IDEsCi19OyAvLyBlbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFscwot
LyogICovCi1lbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMgewotICAgIER1Y2tzID0gMCwKLSAgICBI
ZW5zID0gMSwKLSAgICBDcm93cyA9IDIsCi0gICAgRmxhbWluZ29zID0gMywKLX07IC8vIGVudW0g
Y2xhc3MgQ2FzdGVkQW5pbWFscwotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MSA6IHB1YmxpYyBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0gewotICAgICAg
ICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IDAKLSAgICB9OwotCi0g
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6
Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRF
IHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qUmVj
dXJzaXZlT2JqZWN0MSovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDog
bV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgUmVjdXJzaXZlT2JqZWN0
MTsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgUmVmPFJlY3Vyc2l2ZU9iamVjdDE+IHJlbGVhc2Uo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVs
ZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
c2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDEpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5u
b3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1f
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVp
bnRlcnByZXRfY2FzdDxSZWY8UmVjdXJzaXZlT2JqZWN0MT4qPigmcmVzdWx0KSk7Ci0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAg
ICogUmVmPFJlY3Vyc2l2ZU9iamVjdDE+IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVjdDE6OmNyZWF0
ZSgpCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBz
ZXRPYmooUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+
IHZhbHVlKQotICAgIHsKLSAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgib2JqIiksIFdURk1vdmUodmFsdWUpKTsKLSAgICB9Ci19OwotCi1jbGFzcyBS
ZWN1cnNpdmVPYmplY3QyIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7
Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAg
QWxsRmllbGRzU2V0ID0gMAotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAg
Y2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9
Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypSZWN1cnNpdmVPYmplY3QyKi9JbnNwZWN0b3JPYmpl
Y3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAg
IGZyaWVuZCBjbGFzcyBSZWN1cnNpdmVPYmplY3QyOwotICAgIHB1YmxpYzoKLQotICAgICAgICBS
ZWY8UmVjdXJzaXZlT2JqZWN0Mj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MikgPT0g
c2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAg
ICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxSZWN1cnNpdmVP
YmplY3QyPio+KCZyZXN1bHQpKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8UmVjdXJzaXZlT2JqZWN0Mj4gcmVz
dWx0ID0gUmVjdXJzaXZlT2JqZWN0Mjo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsK
LSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gdmFsdWUpCi0gICAgewotICAgICAgICBJbnNw
ZWN0b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJvYmoiKSwgV1RGTW92ZSh2
YWx1ZSkpOwotICAgIH0KLX07Ci0KLX0gLy8gVGVzdAotCi10ZW1wbGF0ZTw+IHN0cnVjdCBCaW5k
aW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHsKLSNp
ZiAhQVNTRVJUX0RJU0FCTEVECi1zdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKik7Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxF
RAotfTsKLXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiB7Ci1zdGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gcnVudGltZUNhc3QoUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWU+JiYgdmFsdWUpOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLXN0YXRp
YyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWUqKTsKLSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECi19OwotdGVtcGxhdGU8PiBzdHJ1Y3Qg
QmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3Qx
PiB7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBl
Y3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOwotI2VuZGlmIC8vICFBU1NFUlRf
RElTQUJMRUQKLX07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHsKLSNpZiAhQVNTRVJUX0RJU0FCTEVE
Ci1zdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlKik7Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAotfTsKLQotbmFtZXNwYWNl
IFRlc3RIZWxwZXJzIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLXN0
ZDo6b3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNv
bnN0IFN0cmluZyYpOwotCi0vLyBFbnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgotdGVtcGxhdGU8
Pgotc3RkOjpvcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1h
bHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpV
bmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwotdGVtcGxhdGU8Pgotc3RkOjpvcHRpb25h
bDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4oY29u
c3QgU3RyaW5nJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNw
YWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmct
cnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewot
Ci1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51
bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKLSAgICAiRHVja3MiLAotICAgICJIZW5zIiwKLSAgICAi
Q3Jvd3MiLAotICAgICJGbGFtaW5nb3MiLAotICAgICJQaWdzIiwKLSAgICAiQ293cyIsCi0gICAg
IkNhdHMiLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0g
ICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0
aGUgJ1Rlc3QnIERvbWFpbgotdGVtcGxhdGU8Pgotc3RkOjpvcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVl
c1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2Fz
dGVkQW5pbWFsczo6UGlncywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpVbmNhc3RlZEFuaW1hbHM6OkNvd3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpDYXRzLAotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6SGVucywKLSAgICB9Owot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xT
dHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAg
ICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHMp
Y29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQotCi10ZW1w
bGF0ZTw+Ci1zdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFu
aW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpDYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpEdWNrcywKLSAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpIZW5zLAot
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6
OkNyb3dzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3Rl
ZEFuaW1hbHM6OkZsYW1pbmdvcywKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
NDsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1
ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0K
LQotI2lmICFBU1NFUlRfRElTQUJMRUQKLXZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCi17Ci0gICAgQVNTRVJUX0FSRyh2YWx1
ZSwgdmFsdWUpOwotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0g
dmFsdWUtPmFzU3RyaW5nKHJlc3VsdCk7Ci0gICAgQVNTRVJUKGNhc3RTdWNjZWVkZWQpOwotICAg
IEFTU0VSVChyZXN1bHQgPT0gIkR1Y2tzIiB8fCByZXN1bHQgPT0gIkhlbnMiIHx8IHJlc3VsdCA9
PSAiQ3Jvd3MiIHx8IHJlc3VsdCA9PSAiRmxhbWluZ29zIik7Ci19Ci0jZW5kaWYgLy8gIUFTU0VS
VF9ESVNBQkxFRAotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotdm9pZCBCaW5kaW5nVHJhaXRzPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKQotewotICAgIEFT
U0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmpl
Y3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7Ci0g
ICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKLSAgICB7Ci0g
ICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3Igc3RyaW5nUG9zID0gb2JqZWN0LT5maW5k
KEFTQ0lJTGl0ZXJhbCgic3RyaW5nIikpOwotICAgICAgICBBU1NFUlQoc3RyaW5nUG9zICE9IG9i
amVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPFN0cmluZz46OmFzc2VydFZhbHVl
SGFzRXhwZWN0ZWRUeXBlKHN0cmluZ1Bvcy0+dmFsdWUuZ2V0KCkpOwotICAgIH0KLSAgICB7Ci0g
ICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgbnVtYmVyUG9zID0gb2JqZWN0LT5maW5k
KEFTQ0lJTGl0ZXJhbCgibnVtYmVyIikpOwotICAgICAgICBBU1NFUlQobnVtYmVyUG9zICE9IG9i
amVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKG51bWJlclBvcy0+dmFsdWUuZ2V0KCkpOwotICAgIH0KLSAgICB7Ci0gICAg
ICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgYW5pbWFsc1BvcyA9IG9iamVjdC0+ZmluZChB
U0NJSUxpdGVyYWwoImFuaW1hbHMiKSk7Ci0gICAgICAgIEFTU0VSVChhbmltYWxzUG9zICE9IG9i
amVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShhbmltYWxz
UG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgfQotICAgIHsKLSAgICAgICAgSW5zcGVjdG9yT2JqZWN0
OjppdGVyYXRvciBpZFBvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwoImlkIikpOwotICAg
ICAgICBBU1NFUlQoaWRQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJpbmRpbmdUcmFp
dHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoaWRQb3MtPnZhbHVlLmdldCgpKTsK
LSAgICB9Ci0gICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIHRyZWVQb3Mg
PSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJ0cmVlIikpOwotICAgICAgICBBU1NFUlQodHJl
ZVBvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUodHJlZVBvcy0+dmFsdWUuZ2V0KCkpOwotICAgIH0KLQotICAgIGludCBmb3VuZFByb3Bl
cnRpZXNDb3VudCA9IDU7Ci0gICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+
c2l6ZSgpKQotICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDog
JXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwotfQotI2VuZGlm
IC8vICFBU1NFUlRfRElTQUJMRUQKLQotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6
OlR5cGVOZWVkaW5nQ2FzdD4gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpUeXBlTmVlZGluZ0Nhc3Q+OjpydW50aW1lQ2FzdChSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiYg
dmFsdWUpCi17Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0OwotICAgIGJvb2wg
Y2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChyZXN1bHQpOwotICAgIEFTU0VSVF9VTlVT
RUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAot
ICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdD
YXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUocmVzdWx0LmdldCgpKTsKLSNlbmRpZiAg
Ly8gIUFTU0VSVF9ESVNBQkxFRAotICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihJbnNwZWN0b3JPYmpl
Y3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QqPihzdGF0aWNfY2FzdDxJbnNw
ZWN0b3JPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7Ci19Ci0KLQotI2lmICFBU1NFUlRfRElT
QUJMRUQKLXZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1
cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZSogdmFsdWUpCi17Ci0gICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQg
PSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVk
ZWQsIGNhc3RTdWNjZWVkZWQpOwotCi0gICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsK
LSAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3Igb2JqUG9zID0gb2JqZWN0
LT5maW5kKEFTQ0lJTGl0ZXJhbCgib2JqIikpOwotICAgICAgICBpZiAob2JqUG9zICE9IG9iamVj
dC0+ZW5kKCkpIHsKLSAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9i
alBvcy0+dmFsdWUuZ2V0KCkpOwotICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsK
LSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0
LT5zaXplKCkpCi0gICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0
OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci19Ci0jZW5k
aWYgLy8gIUFTU0VSVF9ESVNBQkxFRAotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotdm9pZCBCaW5k
aW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojph
c3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1
ZSkKLXsKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVj
dChvYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRl
ZCk7Ci0KLSAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAwOwotICAgIHsKLSAgICAgICAg
SW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBvYmpQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRl
cmFsKCJvYmoiKSk7Ci0gICAgICAgIGlmIChvYmpQb3MgIT0gb2JqZWN0LT5lbmQoKSkgewotICAg
ICAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNp
dmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52YWx1ZS5nZXQo
KSk7Ci0gICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50OwotICAgICAgICB9Ci0gICAg
fQotICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKLSAgICAg
ICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3Qt
PnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLX0KLSNlbmRpZiAvLyAhQVNTRVJUX0RJ
U0FCTEVECi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJp
bmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0g
ICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVy
KTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0K
LS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9U
ZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkp
Ci1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNv
bmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JWYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFz
cyBUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0OwotQGNsYXNzIFRlc3RQcm90b2NvbFRl
c3RSZWN1cnNpdmVPYmplY3QxOwotQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmpl
Y3QyOwotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFRlc3RVbmNh
c3RlZEFuaW1hbHMpIHsKLSAgICBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzUGlncywK
LSAgICBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ293cywKLSAgICBUZXN0UHJvdG9j
b2xUZXN0VW5jYXN0ZWRBbmltYWxzQ2F0cywKLSAgICBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRB
bmltYWxzSGVucywKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2Nv
bFRlc3RDYXN0ZWRBbmltYWxzKSB7Ci0gICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNE
dWNrcywKLSAgICBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0hlbnMsCi0gICAgVGVzdFBy
b3RvY29sVGVzdENhc3RlZEFuaW1hbHNDcm93cywKLSAgICBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVk
QW5pbWFsc0ZsYW1pbmdvcywKLX07Ci0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QgOiBS
V0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5T
RGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgbnVtYmVyOihp
bnQpbnVtYmVyIGFuaW1hbHM6KFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMg
aWRlbnRpZmllcjooaW50KWlkZW50aWZpZXIgdHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2
ZU9iamVjdDEgKil0cmVlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNv
cHkpIE5TU3RyaW5nICpzdHJpbmc7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgYXNzaWduKSBpbnQgbnVtYmVyOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIGFzc2lnbikgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMgYW5pbWFsczsKLS8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBpZGVudGlmaWVyOwot
LyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29s
VGVzdFJlY3Vyc2l2ZU9iamVjdDEgKnRyZWU7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2li
aWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZl
T2JqZWN0MSA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29u
T2JqZWN0OwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVz
dFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKm9iajsKLUBlbmQKLQotX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RS
ZWN1cnNpdmVPYmplY3QyIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsK
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKWpzb25PYmplY3Q7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0
YWluKSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqb2JqOwotQGVuZAotCi0KLQot
Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvclZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbElu
dGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGlt
ZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJp
bmcoVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscyB2YWx1ZSkKLXsKLSAgICBzd2l0Y2go
dmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzOgot
ICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJQaWdzIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xUZXN0VW5jYXN0ZWRBbmltYWxzQ293czoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
Q293cyIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHM6Ci0g
ICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkNhdHMiKTsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bFRlc3RVbmNhc3RlZEFuaW1hbHNIZW5zOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJI
ZW5zIik7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgVGVzdFByb3RvY29sVGVzdFVu
Y2FzdGVkQW5pbWFscyBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUgPT0gIlBpZ3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVz
dFVuY2FzdGVkQW5pbWFsc1BpZ3M7Ci0gICAgaWYgKHZhbHVlID09ICJDb3dzIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNDb3dzOwotICAgIGlmICh2YWx1
ZSA9PSAiQ2F0cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmlt
YWxzQ2F0czsKLSAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnM7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzOwotfQotCi1p
bmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1h
bHMgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xU
ZXN0Q2FzdGVkQW5pbWFsc0R1Y2tzOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJEdWNr
cyIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5zOgotICAgICAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsKCJIZW5zIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0
Q2FzdGVkQW5pbWFsc0Nyb3dzOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJDcm93cyIp
OwotICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3M6Ci0gICAg
ICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkZsYW1pbmdvcyIpOwotICAgIH0KLX0KLQotdGVtcGxh
dGU8PgotaW5saW5lIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzIGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiRHVja3MiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNEdWNrczsKLSAgICBp
ZiAodmFsdWUgPT0gIkhlbnMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdENhc3Rl
ZEFuaW1hbHNIZW5zOwotICAgIGlmICh2YWx1ZSA9PSAiQ3Jvd3MiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNDcm93czsKLSAgICBpZiAodmFsdWUgPT0gIkZs
YW1pbmdvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0Zs
YW1pbmdvczsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gVGVzdFByb3Rv
Y29sVGVzdENhc3RlZEFuaW1hbHNEdWNrczsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChUZXN0RG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVR5cGVOZWVkaW5nQ2FzdDooVGVz
dFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlQ2FzdGVkT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VVbmNhc3RlZE9iamVj
dElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZv
aWQpX3BhcnNlVW5jYXN0ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlQ2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVJlY3Vyc2l2
ZU9iamVjdDE6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QyOihU
ZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zIChUZXN0RG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVR5cGVOZWVkaW5nQ2FzdDoo
VGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwg
W05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVz
dFR5cGVOZWVkaW5nQ2FzdCBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi0r
ICh2b2lkKV9wYXJzZUNhc3RlZE9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5
bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5
bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VVbmNhc3RlZE9iamVjdElkOihOU051bWJlciAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0g
KE5TTnVtYmVyICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VVbmNhc3RlZEFuaW1hbHM6
KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAg
ICAqb3V0VmFsdWUgPSBAKEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2Nv
bFRlc3RVbmNhc3RlZEFuaW1hbHM+KHBheWxvYWQpKTsKLX0KLQotKyAodm9pZClfcGFyc2VDYXN0
ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAot
ewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNs
YXNzXSk7Ci0gICAgKm91dFZhbHVlID0gQChJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxU
ZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4ocGF5bG9hZCkpOwotfQotCi0rICh2b2lkKV9w
YXJzZVJlY3Vyc2l2ZU9iamVjdDE6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZh
bHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxvY10gaW5pdFdpdGhQ
YXlsb2FkOnBheWxvYWRdOwotfQotCi0rICh2b2lkKV9wYXJzZVJlY3Vyc2l2ZU9iamVjdDI6KFRl
c3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0
UmVjdXJzaXZlT2JqZWN0MiBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1A
ZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVz
Lmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5
PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGlu
aXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInN0cmluZyJdLCBAInN0cmluZyIpOwotICAgIHNlbGYu
c3RyaW5nID0gcGF5bG9hZFtAInN0cmluZyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibnVtYmVyIl0sIEAibnVtYmVyIik7Ci0gICAgc2Vs
Zi5udW1iZXIgPSBbcGF5bG9hZFtAIm51bWJlciJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJhbmltYWxzIl0sIEAi
YW5pbWFscyIpOwotICAgIHNlbGYuYW5pbWFscyA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJv
dG9jb2xUZXN0Q2FzdGVkQW5pbWFscz4ocGF5bG9hZFtAImFuaW1hbHMiXSk7Ci0KLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJpZGVudGlmaWVyIl0s
IEAiaWRlbnRpZmllciIpOwotICAgIHNlbGYuaWRlbnRpZmllciA9IFtwYXlsb2FkW0AiaWQiXSBp
bnRlZ2VyVmFsdWVdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0AidHJlZSJdLCBAInRyZWUiKTsKLSAgICBzZWxmLnRyZWUgPSBbW1Rlc3RQcm90
b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtA
InRyZWUiXV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3QKLXsKLSAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltqc29uT2JqZWN0IHRv
SW5zcGVjdG9yT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFN0cmluZzooTlNTdHJpbmcg
KilzdHJpbmcgbnVtYmVyOihpbnQpbnVtYmVyIGFuaW1hbHM6KFRlc3RQcm90b2NvbFRlc3RDYXN0
ZWRBbmltYWxzKWFuaW1hbHMgaWRlbnRpZmllcjooaW50KWlkZW50aWZpZXIgdHJlZTooVGVzdFBy
b3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHN0cmluZywgQCJzdHJpbmciKTsKLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHRyZWUsIEAidHJlZSIpOwotCi0gICAgc2VsZi5z
dHJpbmcgPSBzdHJpbmc7Ci0gICAgc2VsZi5udW1iZXIgPSBudW1iZXI7Ci0gICAgc2VsZi5hbmlt
YWxzID0gYW5pbWFsczsKLSAgICBzZWxmLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIHNl
bGYudHJlZSA9IHRyZWU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRTdHJp
bmc6KE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpzdHJpbmcgZm9y
S2V5OkAic3RyaW5nIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgcmV0dXJu
IFtzdXBlciBzdHJpbmdGb3JLZXk6QCJzdHJpbmciXTsKLX0KLQotLSAodm9pZClzZXROdW1iZXI6
KGludCludW1iZXIKLXsKLSAgICBbc3VwZXIgc2V0SW50ZWdlcjpudW1iZXIgZm9yS2V5OkAibnVt
YmVyIl07Ci19Ci0KLS0gKGludCludW1iZXIKLXsKLSAgICByZXR1cm4gW3N1cGVyIGludGVnZXJG
b3JLZXk6QCJudW1iZXIiXTsKLX0KLQotLSAodm9pZClzZXRBbmltYWxzOihUZXN0UHJvdG9jb2xU
ZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3Rv
Y29sU3RyaW5nKGFuaW1hbHMpIGZvcktleTpAImFuaW1hbHMiXTsKLX0KLQotLSAoVGVzdFByb3Rv
Y29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscwotewotICAgIHJldHVybiBmcm9tUHJvdG9jb2xT
dHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+KFtzdXBlciBzdHJpbmdGb3JLZXk6
QCJhbmltYWxzIl0pOwotfQotCi0tICh2b2lkKXNldElkZW50aWZpZXI6KGludClpZGVudGlmaWVy
Ci17Ci0gICAgW3N1cGVyIHNldEludGVnZXI6aWRlbnRpZmllciBmb3JLZXk6QCJpZCJdOwotfQot
Ci0tIChpbnQpaWRlbnRpZmllcgotewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpA
ImlkIl07Ci19Ci0KLS0gKHZvaWQpc2V0VHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9i
amVjdDEgKil0cmVlCi17Ci0gICAgW3N1cGVyIHNldE9iamVjdDp0cmVlIGZvcktleTpAInRyZWUi
XTsKLX0KLQotLSAoVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlCi17Ci0g
ICAgcmV0dXJuIFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgYWxsb2NdIGluaXRX
aXRoSW5zcGVjdG9yT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidHJlZSJdIHRvSW5zcGVj
dG9yT2JqZWN0XS5nZXQoKV07Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90
b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxv
YWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAg
IHNlbGYub2JqID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiBhbGxvY10gaW5p
dFdpdGhQYXlsb2FkOnBheWxvYWRbQCJvYmoiXV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KWpzb25PYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSW5zcGVjdG9y
T2JqZWN0Oltqc29uT2JqZWN0IHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICBy
ZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0T2JqOihUZXN0
UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqKW9iagotewotICAgIFtzdXBlciBzZXRPYmpl
Y3Q6b2JqIGZvcktleTpAIm9iaiJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZl
T2JqZWN0MiAqKW9iagotewotICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVP
YmplY3QyIGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktl
eTpAIm9iaiJdIHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV07Ci19Ci0KLUBlbmQKLQotQGltcGxl
bWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyCi0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlk
PiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLQotICAgIHNlbGYub2JqID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZl
T2JqZWN0MSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJvYmoiXV07Ci0KLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltqc29uT2JqZWN0IHRvSW5zcGVjdG9yT2JqZWN0XS5n
ZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KHZvaWQpc2V0T2JqOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKW9iagotewot
ICAgIFtzdXBlciBzZXRPYmplY3Q6b2JqIGZvcktleTpAIm9iaiJdOwotfQotCi0tIChUZXN0UHJv
dG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKW9iagotewotICAgIHJldHVybiBbW1Rlc3RQcm90
b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpb
W3N1cGVyIG9iamVjdEZvcktleTpAIm9iaiJdIHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV07Ci19
Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi1kb21haW4tYXZhaWxhYmlsaXR5Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tYXZhaWxhYmlsaXR5Lmpzb24KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2ZWUyYzYwMDE4MGJlMGFlMTM1OTQwYjQ0N2UxODg3
MWQyN2FlYjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9t
YWluLWF2YWlsYWJpbGl0eS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi17Ci0g
ICAgImRvbWFpbiI6ICJXZWJPbmx5IiwKLSAgICAiYXZhaWxhYmlsaXR5IjogIndlYmIiLAotICAg
ICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZW5hYmxlIgot
ICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJh
bWV0ZXItbmFtZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpz
b24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhYjc2Y2E2Mjc5Y2UzYTRhY2Y3OTg1
NTAwYjMwYjdkMWNmYjhmMGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbgorKysgL2Rl
di9udWxsCkBAIC0xLDE2ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk92ZXJsYXkiLAotICAg
ICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAicHJvY2Vzc1Bv
aW50cyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInBvaW50IiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAg
ICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3VsdDEiLCAi
dHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXN1bHQyIiwg
InR5cGUiOiAic3RyaW5nIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBs
aWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24KZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGM4YmIxNWMwNGI2NTliOWNiOWFmZGUzNGNkNTcyMmJhOWM2ZDRkYTku
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLWNv
bW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTYg
KzAsMCBAQAotewotICAgICJkb21haW4iOiAiT3ZlcmxheSIsCi0gICAgImNvbW1hbmRzIjogWwot
ICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJwcm9jZXNzUG9pbnRzIiwKLSAgICAgICAg
ICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQxIiwg
InR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQyIiwg
InR5cGUiOiAibnVtYmVyIiB9Ci0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInJldHVybnMi
OiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJzdHJpbmci
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJzdHJpbmci
IH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0
ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFt
ZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNkM2IzY2M2NDIzY2VjMjVh
NjdkYTkxMzJhNzY2ODY3NTVhNDQ0MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24KKysrIC9kZXYv
bnVsbApAQCAtMSwxMiArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJPdmVybGF5IiwKLSAgICAi
ZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJwcm9jZXNzZWRQb2lu
dHMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwb2ludCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInBvaW50IiwgInR5cGUiOiAibnVtYmVyIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0K
LSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxp
Y2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3MDJmYzZhMzI3MGE2NDZhNDUwNDQ3ZmRjMDQwMTM5OTVhOTQyYmYwLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9u
cy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotewotICAgICJkb21haW4iOiAi
UnVudGltZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAi
UmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9
LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAg
ICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlx
dWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVw
bGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMu
anNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWViYWNlZThiMjNlMWVhMzQwNWQ4
YWMwYTAwMTYyMDcwMTBjOTQ4NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbgorKysgL2Rldi9udWxsCkBA
IC0xLDE1ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIk92ZXJsYXlUeXBlcyIsCi0gICAg
InR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUG9pbnQiLAotICAgICAg
ICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAieCIsICJ0eXBlIjogImludGVnZXIiIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJ4IiwgInR5cGUiOiAiaW50ZWdlciIgfQotICAgICAgICAgICAg
XQotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwt
b24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAyMzJhN2MzMjQ5YTQwYmQ0NDdlMTlhOTJhOGU1NjkzMGQzZjg1OTU3Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbgor
KysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNl
IiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5
Q29sb3JzIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZW51
bSI6IFtdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9u
YWwtcGFyYW1ldGVyLWZsYWcuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxh
Zy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzA4ZGI5OTJkNjUyNTdmMmI1
YzYzMjdlMGNhMzU0NTAyZDYxNTRhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCisrKyAv
ZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAot
ICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQi
LAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgotICAgICAgICB9Ci0g
ICAgXSwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJk
aWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjog
WwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJzdHJp
bmciLCAib3B0aW9uYWwiOiAwIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tbnVtYmVyLXR5
cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGFmZWE1NTVlYzRmZTA4NjYyNzhlMWZjZDczMzU0MjQyZGVmZDFiZDQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5
cGUtbWVtYmVyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1bCi17Ci0gICAg
ImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAg
ICAgICAiaWQiOiAiRXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAotICAgICAgICAgICAgInBy
b3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUi
OiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24i
OiAiRXJyb3IgY29kZS4iLCAib3B0aW9uYWwiOiAwIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAg
fQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXIt
ZmxhZy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMTJjNzliNmIzOGMyMWRmZjYwN2ZlYzllZTkwYjI4
MDMxMGY5MDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3Ry
aW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24KKysrIC9kZXYvbnVsbApAQCAt
MSwxOCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjog
WwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCi0gICAgICAgICAg
ICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBp
ZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCi0gICAgICAgIH0KLSAgICBdLAotICAgICJl
dmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRp
b25hbFBhcmFtZXRlcnMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25h
bCI6ICJ0cnVlIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRp
b25hbC10eXBlLW1lbWJlci5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTNl
ZjI4YThmODgxNGNjNjE3ZmI1ZDViYzIxMzA2ZDBhYWQ0ZmQwLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJl
ci5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotWwotewotICAgICJkb21haW4i
OiAiRGF0YWJhc2UiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlk
IjogIkVycm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVz
IjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmlu
ZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9y
IGNvZGUuIiwgIm9wdGlvbmFsIjogImZhbHNlIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0K
LSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJl
bmNlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5Yjc1OTBjY2M2ZjZiYzM0NDNhNGEyODNjYTZmY2Nm
ZGYzMjc3MzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlw
ZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCisrKyAvZGV2L251bGwKQEAg
LTEsMTMgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVz
IjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAg
ICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICIkcmVmIjogIlNvbWVUeXBl
IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIu
IgotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJp
bWl0aXZlLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjODNiYmZjZTQxMmI4YjA5ZGY3NDdhODc1ZTgw
MzZkZmVjY2JjMzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24t
dHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0x
LDE4ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBb
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAgICAgICAgICAg
ICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlk
ZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAgfQotICAgIF0sCi0gICAgImV2
ZW50cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlv
bmFsUGFyYW1ldGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiRGF0YWJhc2VJZCIgfQotICAg
ICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS13aXRoLWxvd2Vy
Y2FzZS1uYW1lLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbgpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNTMxOTAxZTRhOWFkOTkzNmIwMWJiYWVkOTdhMWQ0ZGEzNDg0Nzhi
MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXdpdGgt
bG93ZXJjYXNlLW5hbWUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXsKLSAg
ICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJpZCI6ICJkYXRhYmFzZUlkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIi
LAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFi
YXNlIG9iamVjdC4iCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUt
cmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2Ut
aW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBk
Njg4N2EyNzQxMTkwMGE4MGQ1MGYwMDNlYWMzNmMxM2E5OWZhZTU4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlw
ZS1kZWNsYXJhdGlvbi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotWwotewot
ICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAg
ICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAiZHJh
Z29uIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZp
ZXIuIgotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVy
ZW5jZS1pbi10eXBlLW1lbWJlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1l
bWJlci5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODE3ZGI1MDQ0ZGMxZjI4
NTU3MDA4YzFmMTc2MWYxYjA2OGY0Y2U2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbgor
KysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkZhbnRh
c3kiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkRyYWdv
bkVnZyIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIkEgZHJhZ29uIGVnZy4iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2xvciIsICIkcmVmIjogIkNvbG9yIiB9Ci0gICAg
ICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJhdGUtZG9tYWlucy13aXRo
LWZlYXR1cmUtZ3VhcmRzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3Y2Y4ZTU4MmY2NWFlNmZjNjE1NjkyODgyY2Iw
ZjY1NzQ2MDEwOGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyYXRl
LWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMzYg
KzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiTmV0d29yazEiLAotICAgICJmZWF0dXJlR3Vh
cmQiOiAiUExBVEZPUk0oV0VCX0NPTU1BTkRTKSIsCi0gICAgImNvbW1hbmRzIjogWwotICAgICAg
ICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UiLAotICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBv
biB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAg
ICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3JrMiIsCi0gICAgImZlYXR1
cmVHdWFyZCI6ICJQTEFURk9STShXRUJfVFlQRVMpIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJpZCI6ICJOZXR3b3JrRXJyb3IiLAotICAgICAgICAgICAgInR5cGUi
OiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJF
cnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlw
ZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAg
ICBdCi0gICAgICAgIH0KLSAgICBdCi19LAotewotICAgICJkb21haW4iOiAiTmV0d29yazMiLAot
ICAgICJmZWF0dXJlR3VhcmQiOiAiUExBVEZPUk0oV0VCX0VWRU5UUykiLAotICAgICJldmVudHMi
OiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogInJlc291cmNlTG9hZGVkIiwKLSAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIHJlc291cmNlIHdhcyBsb2FkZWQuIgotICAgICAg
ICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTEyNjJl
ODg5ZmE1YmQwYjRhZTU3ZTVmN2YxYmFjNmNmZjNmZTkzOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1h
bmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KQEAgLTAsMCArMSwxMDkgQEAKK3sKKyAgICAi
ZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAor
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNl
IG9iamVjdC4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQcmlt
YXJ5Q29sb3JzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAi
ZW51bSI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiQ29sb3JMaXN0IiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5
IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfQorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAorICAgICAgICAg
ICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFz
ZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVy
cm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBl
IjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KKyAgICAgICAgICAg
IF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwKKyAg
ICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0
YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAg
ICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMi
LCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAi
c3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjog
InN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25h
bCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6
ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJk
YXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0
aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIs
ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9y
IiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ci
LCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzIiwKKyAgICAgICAgICAgICJhc3luYyI6IHRydWUsCisgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAi
JHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnki
LCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJu
cyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAi
YXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAi
LCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIs
ICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQ
cmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjog
InN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0s
ICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7
CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMU3luYyIsCisgICAgICAgICAgICAicGFy
YW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJl
ZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAi
dHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6
IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJy
YXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmlt
YXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0
eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJs
YWNrIl0gfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAibmFtZSI6ICJleGVjdXRlU1FMQXN5bmMiLAorICAgICAgICAgICAgImFzeW5jIjogdHJ1ZSwK
KyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
ZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAgXSwKKyAgICAg
ICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFt
ZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJ
ZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJy
b3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjog
IlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVD
b2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50
YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBd
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29u
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjM2MWQ1N2Q4MjBkZTkxNmE3M2NiZGQ5ODM4M2QxMjY0MjAzOThmNGEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbgpAQCAtMCwwICsxLDg1IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisg
ICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIs
CisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAg
ICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbInJlZCIsICJncmVlbiIs
ICJibHVlIl0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkNvbG9y
TGlzdCIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMi
OiB7ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAg
ICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0
eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0
aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAor
ICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAi
b3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwi
OiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6
ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjog
IkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29s
b3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0
ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIs
ICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25h
bCI6IHRydWUgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJv
cHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjog
Im51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAi
RGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xv
cnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRl
cm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwg
ImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFs
IjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJuYW1lIjogImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwg
InR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmlt
YXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3Jz
IiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJp
bnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAi
eWVsbG93IiwgImJsYWNrIl0gfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5z
IjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJh
cnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMi
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6
ICJDb2xvckxpc3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwg
InR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAi
YmxhY2siXSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9k
b21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kb21haW5zLXdpdGgtdmFyeWlu
Zy1jb21tYW5kLXNpemVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTRhOGVjYjE3NmQzYjhlYzliZjk2Njc2
ZTYzY2VhMDUxNDY2Yjg2OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbgpAQCAtMCwwICsxLDU0IEBACitbCit7CisgICAgImRvbWFpbiI6ICJO
ZXR3b3JrMSIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFt
ZSI6ICJsb2FkUmVzb3VyY2UxIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBh
IHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdl
IHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0KKyAgICBdCit9LAorewor
ICAgICJkb21haW4iOiAiTmV0d29yazIiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIkxvYWRlcklkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIs
CisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGxvYWRlciBpZGVudGlmaWVyLiIK
KyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMyIsCisgICAg
ImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3Vy
Y2UxIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRo
ZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mg
b3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1l
IjogImxvYWRSZXNvdXJjZTIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEg
cmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ug
d2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMyIsCisgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBp
bnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U0IiwKKyAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEg
ZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4i
CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJj
ZTUiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhl
IGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBv
cmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUi
OiAibG9hZFJlc291cmNlNiIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSBy
ZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3
aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U3IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGlu
c3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0KKyAg
ICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9lbnVtLXZhbHVlcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZW51bS12YWx1ZXMuanNvbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jZGFkNjFkZjdjOWY5Yzc2ZTY5Mjg5N2MzZGZlMGIwODIzZjkwZTRkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZW51bS12YWx1ZXMuanNvbgpAQCAtMCwwICsxLDM1IEBACit7ImRvbWFpbnMiOlsK
K3sKKyAgICAiZG9tYWluIjogIlR5cGVEb21haW4iLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAg
eworICAgICAgICAgICAgImlkIjogIlR5cGVEb21haW5FbnVtIiwKKyAgICAgICAgICAgICJ0eXBl
IjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsic2hhcmVkIiwgInJlZCIsICJncmVl
biIsICJibHVlIl0KKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJDb21t
YW5kRG9tYWluIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJu
YW1lIjogImNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlIiwKKyAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogW10sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInJldHVyblZhbHVlIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIs
ICJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93Il0gfQorICAgICAgICAgICAgXQorICAgICAgICB9
CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIkV2ZW50RG9tYWluIiwKKyAgICAiZXZlbnRz
IjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJldmVudFdpdGhFbnVtUGFyYW1l
dGVyIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGFyYW1ldGVyIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJi
bGFjayIsICJ3aGl0ZSJdIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KK119
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9ldmVudHMtd2l0
aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2FiYmYxMGI4MzZmOWZmN2Nk
OTkyNWRiNGQ2YjQxYzVkZmE4N2I0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2ZW50cy13aXRoLW9wdGlv
bmFsLXBhcmFtZXRlcnMuanNvbgpAQCAtMCwwICsxLDU5IEBACit7CisgICAgImRvbWFpbiI6ICJE
YXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
RGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwK
KyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAidmFsdWVzIjogWyJy
ZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJDb2xvckxpc3QiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAg
ICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9CisgICAgICAgIH0sCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6
ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIs
CisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
Im1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2Fn
ZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdl
ciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAg
ICB9CisgICAgXSwKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFt
ZSI6ICJkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6
ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIs
ICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFt
cCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIs
ICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwg
IiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJ2YWx1ZXMiOiBbImN5
YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9Cisg
ICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjog
ImRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVy
cyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAi
YXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9y
TGlzdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6
ICJzdHJpbmciLCAidmFsdWVzIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNr
Il0gfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21t
YW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZDVjNDRj
NWI5MGUwNTQxZGU2MTJjMzFlZjRhNDJlZjg2ODVlYzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwx
NzU0IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBE
YXRhYmFzZS4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEYXRhYmFzZURpc3BhdGNoZXIgPSBJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJh
Y2tlbmQsICJEYXRhYmFzZSIpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFi
YXNlLlByaW1hcnlDb2xvcnMiLCB7UmVkOiAicmVkIiwgR3JlZW46ICJncmVlbiIsIEJsdWU6ICJi
bHVlIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAi
dHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJxdWVyeSIsICJ0
eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNlfV0sIFsiY29sdW1uTmFtZXMiLCAibm90
ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3Fs
RXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7
CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6
ICJudW1iZXIiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjog
InN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNlfV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAi
dGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3Ii
LCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7CitJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMiLCBb
eyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiBmYWxz
ZX0sIHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNl
fV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXls
b2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInNjcmVl
bkNvbG9yIiwgInByaW50Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFu
ZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jIiwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5
cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlw
ZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVz
IiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVy
cm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOwor
SW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiKTsKKyMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlcy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2Vu
ZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92
ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
cigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6
CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsK
KworCitjbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5h
dGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFz
ZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlU1FMU3luYyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYg
aW5fcXVlcnkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2Fs
bElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5j
LWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7Cisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNz
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1l
ZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9l
dmVudCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzLgorICAgIGVudW0gY2xhc3Mg
UHJpbnRDb2xvciB7CisgICAgICAgIEN5YW4gPSAzLAorICAgICAgICBNYWdlbnRhID0gNCwKKyAg
ICAgICAgWWVsbG93ID0gNSwKKyAgICAgICAgQmxhY2sgPSA2LAorICAgIH07IC8vIGVudW0gY2xh
c3MgUHJpbnRDb2xvcgorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYg
aW5fcXVlcnksIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYgb3B0
X291dF9jb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4q
IG9wdF9vdXRfbm90ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+KiBv
cHRfb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0Piogb3B0X291dF92YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiogb3B0X291dF9wYXlsb2FkLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50Piogb3B0X291dF9kYXRhYmFzZUlkLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxF
cnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9v
dXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29s
b3JMaXN0PiYgb3B0X291dF9hbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpQcmludENvbG9yKiBvcHRfb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICBjbGFz
cyBFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrIDogcHVibGljIEJh
Y2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgRXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhSZWY8QmFja2VuZERpc3Bh
dGNoZXI+JiYsIGludCBpZCk7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBub3RlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
T3B0T3V0cHV0PGRvdWJsZT4qIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0
cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogdmFsdWVzLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIHBheWxvYWQsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHByaW50Q29sb3IpOworICAgIH07Cisg
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKEVycm9y
U3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZjxF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKEVycm9yU3RyaW5nJiwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+PiYgb3V0X2NvbHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3Rl
cywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogb3V0
X3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0
X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiBvdXRfc3FsRXJyb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29s
b3JMaXN0PiYgb3V0X2FsdGVybmF0ZUNvbG9ycywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7CisgICAgY2xhc3Mg
RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sgOiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxi
YWNrQmFzZSB7CisgICAgcHVibGljOgorICAgICAgICBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhS
ZWY8QmFja2VuZERpc3BhdGNoZXI+JiYsIGludCBpZCk7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nl
c3MoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYgY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0IHZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBwYXlsb2FkLCBp
bnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJv
cj4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25z
dCBTdHJpbmcmIHByaW50Q29sb3IpOworICAgIH07CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVT
UUxBc3luYyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGlu
X3F1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigp
OworfTsKKworY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1l
c3NhZ2UpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYg
cGFyYW1ldGVycyk7CisgICAgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsK
KyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZvaWQgc2V0
QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKiBh
bHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURp
c3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlmCitwcml2YXRl
OgorICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
IgorI2VuZGlmCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6fkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisK
K1JlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsK
K30KKworRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFs
KCJEYXRhYmFzZSIpLCB0aGlzKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBw
YXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMiKQorICAgICAgICBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
KHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgZWxzZSBpZiAobWV0aG9kID09
ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpCisgICAgICAgIGV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJz
KSk7CisgICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMU3luYyIpCisgICAgICAgIGV4
ZWN1dGVTUUxTeW5jKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgZWxzZSBp
ZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmMiKQorICAgICAgICBleGVjdXRlU1FMQXN5bmMo
cmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1l
dGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcJycsICJEYXRhYmFzZSIsICcuJywgbWV0aG9kLCAi
JyB3YXMgbm90IGZvdW5kIikpOworfQorCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6
OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycykKK3sKKyAgICBpbnQgaW5fZGF0YWJhc2VJ
ZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgQVND
SUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIpOworICAgIFN0cmluZyBpbl9xdWVyeSA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxp
dGVyYWwoInF1ZXJ5IiksIG51bGxwdHIpOworICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5o
YXNQcm90b2NvbEVycm9ycygpKSB7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIFN0cmluZzo6
Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQi
LCAiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVl
c3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgICAgICByZXR1cm47CisgICAgfQor
I2VuZGlmCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4gb3V0X25vdGVzOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+IG91dF90aW1lc3RhbXA7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBvdXRf
dmFsdWVzOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRP
dXRwdXQ8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQ+IG91dF9kYXRh
YmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7CisgICAgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7CisgICAg
bV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhlcnJvciwgaW5fZGF0
YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1l
c3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3Fs
RXJyb3IsICZvdXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsICZvdXRfcHJpbnRD
b2xvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIGlmIChvdXRfY29s
dW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29s
dW1uTmFtZXMiKSwgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgaWYgKG91dF9ub3Rlcy5pc0Fz
c2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5v
dGVzIiksIG91dF9ub3Rlcy5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF90aW1lc3RhbXAu
aXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFs
KCJ0aW1lc3RhbXAiKSwgb3V0X3RpbWVzdGFtcC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91
dF92YWx1ZXMuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJ2YWx1ZXMiKSwgb3V0X3ZhbHVlcy5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYg
KG91dF9wYXlsb2FkLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUo
QVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIG91dF9wYXlsb2FkLmdldFZhbHVlKCkpOworICAgICAg
ICBpZiAob3V0X2RhdGFiYXNlSWQuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5z
ZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBvdXRfZGF0YWJhc2VJZC5nZXRW
YWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdC0+
c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgb3V0X3NxbEVycm9yKTsKKyAgICAg
ICAgaWYgKG91dF9zY3JlZW5Db2xvci5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIG91dF9zY3JlZW5Db2xvci5n
ZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVDb2xvcnMpCisgICAgICAgICAg
ICByZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIG91dF9h
bHRlcm5hdGVDb2xvcnMpOworICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaXNBc3NpZ25lZCgp
KQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9y
IiksIG91dF9wcmludENvbG9yLmdldFZhbHVlKCkpOworICAgIH0KKyAgICBpZiAoIWVycm9yLmxl
bmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBXVEZNb3ZlKHJlc3VsdCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IFdURk1vdmUoZXJyb3IpKTsKK30KKworRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s6OkV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYm
IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNr
QmFzZShXVEZNb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQpIHsgfQorCit2b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlc0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0
PFN0cmluZz4qIG5vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiog
dGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+KiB2YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlPiogcGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0
T3V0cHV0PGludD4qIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxT
dHJpbmc+KiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRP
dXRwdXQ8U3RyaW5nPiogcHJpbnRDb2xvcikKK3sKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBq
c29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKGNvbHVtbk5h
bWVzKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5O
YW1lcyIpLCBjb2x1bW5OYW1lcyk7CisgICAgaWYgKG5vdGVzLmlzQXNzaWduZWQoKSkKKyAgICAg
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG5vdGVzLmdl
dFZhbHVlKCkpOworICAgIGlmICh0aW1lc3RhbXAuaXNBc3NpZ25lZCgpKQorICAgICAgICBqc29u
TWVzc2FnZS0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHRpbWVzdGFtcC5n
ZXRWYWx1ZSgpKTsKKyAgICBpZiAodmFsdWVzLmlzQXNzaWduZWQoKSkKKyAgICAgICAganNvbk1l
c3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCB2YWx1ZXMuZ2V0VmFsdWUo
KSk7CisgICAgaWYgKHBheWxvYWQuaXNBc3NpZ25lZCgpKQorICAgICAgICBqc29uTWVzc2FnZS0+
c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHBheWxvYWQuZ2V0VmFsdWUoKSk7Cisg
ICAgaWYgKGRhdGFiYXNlSWQuaXNBc3NpZ25lZCgpKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0
SW50ZWdlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgZGF0YWJhc2VJZC5nZXRWYWx1ZSgp
KTsKKyAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJzcWxFcnJvciIpLCBzcWxFcnJvcik7CisgICAgaWYgKHNjcmVlbkNvbG9yLmlz
QXNzaWduZWQoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
InNjcmVlbkNvbG9yIiksIHNjcmVlbkNvbG9yLmdldFZhbHVlKCkpOworICAgIGlmIChhbHRlcm5h
dGVDb2xvcnMpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImFs
dGVybmF0ZUNvbG9ycyIpLCBhbHRlcm5hdGVDb2xvcnMpOworICAgIGlmIChwcmludENvbG9yLmlz
QXNzaWduZWQoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
InByaW50Q29sb3IiKSwgcHJpbnRDb2xvci5nZXRWYWx1ZSgpKTsKKyAgICBDYWxsYmFja0Jhc2U6
OnNlbmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2UpKTsKK30KKwordm9pZCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKQoreworICAg
IGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJh
bWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0cik7CisgICAg
U3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRl
cnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0cik7CisgICAgaWYgKG1fYmFj
a2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxp
ZFBhcmFtcywgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNh
bid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlcyIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIp
IHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAg
UmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVxdWVz
dElkKSk7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
ZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBjYWxsYmFjay5jb3B5UmVmKCkpOworCisg
ICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIGNhbGxiYWNrLT5kaXNhYmxlKCk7Cisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9
CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycykKK3sKKyAgICBp
bnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1l
dGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIpOworICAgIFN0
cmluZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJz
LmdldCgpLCBBU0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIpOworICAgIGlmIChtX2JhY2tl
bmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQ
YXJhbXMsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4n
dCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMiKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9x
dWVyeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIEVycm9yU3RyaW5n
IGVycm9yOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmlu
Zz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBTdHJpbmcgb3V0X25vdGVzOworICAgIGRvdWJsZSBv
dXRfdGltZXN0YW1wOworICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IG91dF92YWx1ZXM7
CisgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBvdXRfcGF5bG9hZDsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RGF0YWJhc2VJZCBvdXRfZGF0YWJhc2VJZDsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7
CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91
dF9hbHRlcm5hdGVDb2xvcnM7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOworICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1
dGVTUUxTeW5jKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVz
LCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAm
b3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgJm91dF9z
Y3JlZW5Db2xvciwgJm91dF9wcmludENvbG9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
IHsKKyAgICAgICAgcmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiks
IG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgibm90ZXMiKSwgb3V0X25vdGVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoQVNDSUlM
aXRlcmFsKCJ0aW1lc3RhbXAiKSwgb3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdC0+c2V0
T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG91dF92YWx1ZXMpOworICAgICAgICByZXN1
bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBvdXRfcGF5bG9hZCk7CisgICAg
ICAgIHJlc3VsdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgb3V0X2Rh
dGFiYXNlSWQpOworICAgICAgICByZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVy
cm9yIiksIG91dF9zcWxFcnJvcik7CisgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoQVNDSUlMaXRl
cmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgb3V0X2FsdGVybmF0ZUNvbG9ycyk7CisgICAgICAgIHJl
c3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xv
cikpOworICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3Ii
KSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVl
KG91dF9wcmludENvbG9yKSk7CisgICAgfQorICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUo
cmVzdWx0KSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJv
cikpOworfQorCitEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFz
eW5jQ2FsbGJhY2s6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hl
cj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxs
YmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7IH0KKwordm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s6OnNl
bmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYmIGNv
bHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdCB2YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgcGF5
bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6RXJyb3I+JiYgc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9y
cywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKQoreworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+
IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2Fn
ZS0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBjb2x1bW5OYW1lcyk7Cisg
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG5vdGVzKTsK
KyAgICBqc29uTWVzc2FnZS0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHRp
bWVzdGFtcCk7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVl
cyIpLCB2YWx1ZXMpOworICAgIGpzb25NZXNzYWdlLT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBh
eWxvYWQiKSwgcGF5bG9hZCk7CisgICAganNvbk1lc3NhZ2UtPnNldEludGVnZXIoQVNDSUlMaXRl
cmFsKCJkYXRhYmFzZUlkIiksIGRhdGFiYXNlSWQpOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmpl
Y3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBzcWxFcnJvcik7CisgICAganNvbk1lc3NhZ2Ut
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzY3JlZW5Db2xvcikpOworICAg
IGpzb25NZXNzYWdlLT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBh
bHRlcm5hdGVDb2xvcnMpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJwcmludENvbG9yIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVt
Q29uc3RhbnRWYWx1ZShwcmludENvbG9yKSk7CisgICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3VjY2Vz
cyhXVEZNb3ZlKGpzb25NZXNzYWdlKSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYmIHBhcmFtZXRlcnMpCit7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0
YWJhc2VJZCIpLCBudWxscHRyKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJxdWVyeSIp
LCBudWxscHRyKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJv
cnMoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBTdHJpbmc6OmZvcm1hdCgiU29tZSBh
cmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4
ZWN1dGVTUUxBc3luYyIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3Bh
dGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5bmMo
cmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisjZW5kaWYKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4gY2Fs
bGJhY2sgPSBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpF
eGVjdXRlU1FMQXN5bmNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVx
dWVzdElkKSk7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jKGVycm9yLCBpbl9kYXRhYmFz
ZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsKKworICAgIGlmIChlcnJvci5sZW5n
dGgoKSkgeworICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOworICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5j
bHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3Rv
Y29sIHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgRGF0YWJhc2Ugewor
Y2xhc3MgRXJyb3I7CitlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnM7Cit9IC8vIERhdGFiYXNlCisv
LyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworLy8gVHlwZWRlZnMuCituYW1lc3Bh
Y2UgRGF0YWJhc2UgeworLyogVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiAq
LwordHlwZWRlZiBpbnQgRGF0YWJhc2VJZDsKK3R5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IENvbG9y
TGlzdDsKK30gLy8gRGF0YWJhc2UKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworbmFtZXNwYWNlIFRl
c3RIZWxwZXJzIHsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZh
bHVlKQoreworICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+
KGVudW1WYWx1ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCituYW1lc3Bh
Y2UgRGF0YWJhc2UgeworLyogICovCitlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMgeworICAgIFJl
ZCA9IDAsCisgICAgR3JlZW4gPSAxLAorICAgIEJsdWUgPSAyLAorfTsgLy8gZW51bSBjbGFzcyBQ
cmltYXJ5Q29sb3JzCisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9yIDogcHVibGlj
IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7Cisg
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAg
ICAgICAgQ29kZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VT
ZXQgfCBDb2RlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xh
c3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisK
KyAgICAgICAgQnVpbGRlcihSZWY8LypFcnJvciovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkK
KyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3Mg
RXJyb3I7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0
PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2Vf
YWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoIm1lc3NhZ2UiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNz
YWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+
JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiY29kZSIpLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5zcGVj
dG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgcmV0
dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZyZXN1bHQpKTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
KyAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQorICAgICAqICAgICAu
c2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRDb2RlKC4uLikKKyAgICAgKiAgICAgLnJl
bGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCit9IC8vIERhdGFiYXNlCisKKworCituYW1l
c3BhY2UgVGVzdEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBl
Pgorc3RkOjpvcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJp
bmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgor
dGVtcGxhdGU8Pgorc3RkOjpvcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1l
c3BhY2UgVGVzdEhlbHBlcnMKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMg
eworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsK
KyAgICAicmVkIiwKKyAgICAiZ3JlZW4iLAorICAgICJibHVlIiwKKyAgICAiY3lhbiIsCisgICAg
Im1hZ2VudGEiLAorICAgICJ5ZWxsb3ciLAorICAgICJibGFjayIsCit9OworCitTdHJpbmcgZ2V0
RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92
YWx1ZXNbY29kZV07Cit9CisKKy8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgordGVt
cGxhdGU8Pgorc3RkOjpvcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQor
eworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6UmVk
LAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzOjpHcmVlbiwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9yczo6Qmx1ZSwKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgMzsgKytpKQorICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFu
dF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyljb25zdGFudFZhbHVlc1tpXTsK
KworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhl
bHBlcnMKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90b2NvbERhdGFiYXNl
RG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0lu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRl
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5k
bGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBp
bl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0
SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9k
YXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIFJldGFpblB0
cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7
CisgICAgaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBfZGF0YWJhc2VIYW5k
bGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29u
dHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxm
OworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RhdGFiYXNlSGFuZGxlciByZWxlYXNl
XTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0RGF0YWJhc2VIYW5kbGVy
OihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBp
ZiAoaGFuZGxlciA9PSBfZGF0YWJhc2VIYW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBb
X2RhdGFiYXNlSGFuZGxlciByZWxlYXNlXTsKKyAgICBfZGF0YWJhc2VIYW5kbGVyID0gW2hhbmRs
ZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91
bmlxdWU8T2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwor
ICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50PERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZURhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI+PihBU0NJSUxpdGVyYWwoIkRhdGFiYXNlIiksICpfY29udHJvbGxl
ciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVu
ZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJv
dG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWRhdGFiYXNlSGFuZGxlcgoreworICAgIHJldHVy
biBfZGF0YWJhc2VIYW5kbGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFp
biwgc2V0dGVyPXNldERhdGFiYXNlSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9t
YWluSGFuZGxlcj4gZGF0YWJhc2VIYW5kbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBj
b21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2Rh
dGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCit7CisgICAgaWQgZXJyb3JDYWxsYmFj
ayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3Rh
bXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoq
c3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3Is
IE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRD
b2xvcikgeworICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9P
UFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVz
Iik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2
YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Cisg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5h
dGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7CisgICAgICAgIGlmIChjb2x1bW5OYW1lcykK
KyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5O
YW1lcyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheSgqY29sdW1uTmFtZXMpKTsKKyAgICAgICAgaWYg
KG5vdGVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJub3RlcyIpLCAqbm90ZXMpOworICAgICAgICBpZiAodGltZXN0YW1wKQorICAgICAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgKnRpbWVz
dGFtcCk7CisgICAgICAgIGlmICh2YWx1ZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNl
dE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBbKnZhbHVlcyB0b0luc3BlY3Rvck9iamVj
dF0pOworICAgICAgICBpZiAocGF5bG9hZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIFsqcGF5bG9hZCB0b0luc3BlY3Rvck9iamVj
dF0pOworICAgICAgICBpZiAoZGF0YWJhc2VJZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgKmRhdGFiYXNlSWQpOworICAg
ICAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdChB
U0NJSUxpdGVyYWwoInNxbEVycm9yIiksIFsqc3FsRXJyb3IgdG9JbnNwZWN0b3JPYmplY3RdKTsK
KyAgICAgICAgaWYgKHNjcmVlbkNvbG9yKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCB0b1Byb3RvY29sU3RyaW5nKCpzY3Jl
ZW5Db2xvcikpOworICAgICAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBpbnNw
ZWN0b3JTdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgICAgIGlmIChwcmludENv
bG9yKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJw
cmludENvbG9yIiksIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3IpKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRP
YmplY3QpKTsKKyAgICB9OworCisgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNl
SWQ7CisgICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKKworICAgIFttX2RlbGVn
YXRlIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazpl
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpv
X2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBp
bl9xdWVyeSkKK3sKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBO
U1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNl
SWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
YWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgeworICAgICAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1u
TmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CisgICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBA
InBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29s
b3JzIik7CisgICAgICAgIGlmIChjb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBpbnNwZWN0b3JTdHJpbmdB
cnJheSgqY29sdW1uTmFtZXMpKTsKKyAgICAgICAgaWYgKG5vdGVzKQorICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCAqbm90ZXMpOworICAg
ICAgICBpZiAodGltZXN0YW1wKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUo
QVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgKnRpbWVzdGFtcCk7CisgICAgICAgIGlmICh2YWx1
ZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZh
bHVlcyIpLCBbKnZhbHVlcyB0b0luc3BlY3Rvck9iamVjdF0pOworICAgICAgICBpZiAocGF5bG9h
ZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXls
b2FkIiksIFsqcGF5bG9hZCB0b0luc3BlY3Rvck9iamVjdF0pOworICAgICAgICBpZiAoZGF0YWJh
c2VJZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwo
ImRhdGFiYXNlSWQiKSwgKmRhdGFiYXNlSWQpOworICAgICAgICBpZiAoc3FsRXJyb3IpCisgICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiks
IFsqc3FsRXJyb3IgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICAgICAgaWYgKHNjcmVlbkNvbG9y
KQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3Jl
ZW5Db2xvciIpLCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOworICAgICAgICBpZiAo
YWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheShBU0NJ
SUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheSgqYWx0ZXJu
YXRlQ29sb3JzKSk7CisgICAgICAgIGlmIChwcmludENvbG9yKQorICAgICAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIHRvUHJvdG9jb2xT
dHJpbmcoKnByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpKTsKKyAgICB9OworCisgICAg
aW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CisgICAgTlNTdHJpbmcgKm9faW5f
cXVlcnkgPSBpbl9xdWVyeTsKKworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9f
aW5fcXVlcnldOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgaW5fcXVlcnkpCit7CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJp
bmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9
OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNv
bHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBk
YXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgTlNBcnJheS8q
PE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9ycyBzY3JlZW5Db2xvciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1By
aW50Q29sb3IgcHJpbnRDb2xvcikgeworICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3Rlcywg
QCJub3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
Uih2YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMs
IEAiYWx0ZXJuYXRlQ29sb3JzIik7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoQVND
SUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheShjb2x1bW5OYW1l
cykpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVz
IiksIG5vdGVzKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFs
KCJ0aW1lc3RhbXAiKSwgdGltZXN0YW1wKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmpl
Y3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgW3ZhbHVlcyB0b0luc3BlY3Rvck9iamVjdF0pOwor
ICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBb
cGF5bG9hZCB0b0luc3BlY3Rvck9iamVjdF0pOworICAgICAgICByZXN1bHRPYmplY3QtPnNldElu
dGVnZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIGRhdGFiYXNlSWQpOworICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIFtzcWxFcnJv
ciB0b0luc3BlY3Rvck9iamVjdF0pOworICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KEFT
Q0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KGFsdGVy
bmF0ZUNvbG9ycykpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoInNjcmVlbkNvbG9yIiksIHRvUHJvdG9jb2xTdHJpbmcoc2NyZWVuQ29sb3IpKTsKKyAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIHRv
UHJvdG9jb2xTdHJpbmcocHJpbnRDb2xvcikpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCkpOworICAgIH07
CisKKyAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKKyAgICBOU1N0cmlu
ZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OworCisgICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTFN5
bmNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Cit9
CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVT
UUxBc3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYg
aW5fcXVlcnkpCit7CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQg
c3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBO
U1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
dmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0
ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIHBy
aW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsK
KyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBA
InZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
UihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0
ZUNvbG9ycyIpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgi
Y29sdW1uTmFtZXMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKKyAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7
CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1w
IiksIHRpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0
ZXJhbCgidmFsdWVzIiksIFt2YWx1ZXMgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgW3BheWxvYWQgdG9J
bnNwZWN0b3JPYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKEFTQ0lJ
TGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBkYXRhYmFzZUlkKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBbc3FsRXJyb3IgdG9JbnNwZWN0
b3JPYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJzY3JlZW5Db2xvciIpLCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7CisgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwg
aW5zcGVjdG9yU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCB0b1Byb3RvY29sU3Ry
aW5nKHByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3Bv
bnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpKTsKKyAgICB9OworCisgICAgaW50
IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CisgICAgTlNTdHJpbmcgKm9faW5fcXVl
cnkgPSBpbl9xdWVyeTsKKworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxBc3luY1dpdGhFcnJv
ckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBk
YXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKK30KKworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0
Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRo
LWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNo
ZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3QuaD4KKworCitAY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcjsKKworCit0
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnMpIHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQsCisgICAgVGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW4sCisgICAgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZSwKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1By
aW50Q29sb3IpIHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YSwKKyAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmlu
dENvbG9yWWVsbG93LAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjaywKK307CisKK3R5cGVkZWYgTlNfRU5VTShO
U0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNQcmludENvbG9yKSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFn
ZW50YSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdywKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrLAorfTsKKwordHlw
ZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3lu
Y1ByaW50Q29sb3IpIHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJp
bnRDb2xvckN5YW4sCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50
Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmlu
dENvbG9yWWVsbG93LAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmlu
dENvbG9yQmxhY2ssCit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IpIHsKKyAgICBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvck1hZ2VudGEsCisgICAgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yWWVsbG93LAorICAgIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckJsYWNrLAorfTsKKworCitfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Cist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcg
KiltZXNzYWdlIGNvZGU6KGludCljb2RlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7CitAZW5kCisKK0Bwcm90b2NvbCBUZXN0UHJv
dG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQHJlcXVpcmVkCistICh2b2lk
KWV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazoodm9p
ZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lk
KF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVz
LCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3Jz
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQ
cmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRh
dGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcg
KmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1l
c3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29s
b3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnBy
aW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVy
eTooTlNTdHJpbmcgKilxdWVyeTsKKy0gKHZvaWQpZXhlY3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxs
YmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5n
ICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVy
bmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9y
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciBwcmludENvbG9y
KSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3Ry
aW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNhbGxiYWNrOih2
b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZv
aWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVz
LCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBz
Y3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciBwcmludENvbG9yKSlzdWNj
ZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICop
cXVlcnk7CitAZW5kCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT2JqQ0VudW1UeXBl
IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCitpbmxpbmUgU3Ry
aW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHZh
bHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VQcmltYXJ5Q29sb3JzUmVkOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJyZWQiKTsK
KyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuOgorICAgICAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsKCJncmVlbiIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZToKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYmx1
ZSIpOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9ycyBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sK
KyAgICBpZiAodmFsdWUgPT0gInJlZCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnNSZWQ7CisgICAgaWYgKHZhbHVlID09ICJncmVlbiIpCisgICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbjsKKyAgICBpZiAo
dmFsdWUgPT0gImJsdWUiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzQmx1ZTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOworfQorCitpbmxpbmUgU3RyaW5nIHRv
UHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAg
ICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJjeWFuIik7
CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
bWFnZW50YSIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuIEFTQ0lJ
TGl0ZXJhbCgieWVsbG93Iik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVy
biBBU0NJSUxpdGVyYWwoImJsYWNrIik7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJp
bnRDb2xvciBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBp
ZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW47CisgICAgaWYg
KHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOworICAg
IGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c7Cisg
ICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2s7Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOworfQorCitp
bmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAgc3dp
dGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiBBU0NJ
SUxpdGVyYWwoImN5YW4iKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgibWFnZW50YSIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c6Cisg
ICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInllbGxvdyIpOworICAgIGNhc2UgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JC
bGFjazoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYmxhY2siKTsKKyAgICB9Cit9CisK
K3RlbXBsYXRlPD4KK2lubGluZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1By
aW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
UHJpbnRDb2xvck1hZ2VudGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvckJsYWNrOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzUHJpbnRDb2xvckN5YW47Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAg
ICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TFN5bmNQcmludENvbG9yQ3lhbjoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiY3lhbiIp
OworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JN
YWdlbnRhOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJtYWdlbnRhIik7CisgICAgY2Fz
ZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvclllbGxvdzoKKyAg
ICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgieWVsbG93Iik7CisgICAgY2FzZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNrOgorICAgICAgICByZXR1cm4g
QVNDSUlMaXRlcmFsKCJibGFjayIpOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCisg
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xv
ckN5YW47CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yTWFnZW50YTsKKyAgICBpZiAo
dmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jUHJpbnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikK
KyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENv
bG9yQmxhY2s7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQ3lhbjsKK30KKworaW5saW5lIFN0
cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5j
UHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckN5YW46CisgICAgICAgIHJl
dHVybiBBU0NJSUxpdGVyYWwoImN5YW4iKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvck1hZ2VudGE6CisgICAgICAgIHJldHVybiBBU0NJSUxp
dGVyYWwoIm1hZ2VudGEiKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TEFzeW5jUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgieWVs
bG93Iik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50
Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYmxhY2siKTsKKyAgICB9
Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY1ByaW50Q29sb3IgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7
CisgICAgaWYgKHZhbHVlID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckN5YW47CisgICAgaWYgKHZhbHVlID09ICJt
YWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFz
eW5jUHJpbnRDb2xvck1hZ2VudGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yWWVs
bG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQmxhY2s7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFz
eW5jUHJpbnRDb2xvckN5YW47Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMg
KERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VQcmltYXJ5
Q29sb3JzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysg
KHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFi
YXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNO
dW1iZXIgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TTnVt
YmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0
VmFsdWUgPSBAKEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycz4ocGF5bG9hZCkpOworfQorCisrICh2b2lkKV9wYXJzZUNvbG9yTGlz
dDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJh
eS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xh
c3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2Nd
IGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbXBvcnQgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAor
eworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVz
c2FnZSJdLCBAIm1lc3NhZ2UiKTsKKyAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2Fn
ZSJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2Fk
W0AiY29kZSJdLCBAImNvZGUiKTsKKyAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBp
bnRlZ2VyVmFsdWVdOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Cit7Cisg
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbanNvbk9iamVj
dCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0
cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3Nh
Z2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3Vw
ZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmlu
ZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2Ui
XTsKK30KKworLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAgIFtzdXBlciBzZXRJbnRl
Z2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29kZQoreworICAgIHJldHVy
biBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdp
dGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Nv
bW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yZTIxMzkzZGQ1N2ZmZWI0ZjZjZTEwNDNjM2ExNDVkNjcyZDAwY2FhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1w
YXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTYwOSBAQAorIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIERhdGFiYXNl
LgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLlByaW1hcnlDb2xvcnMi
LCB7UmVkOiAicmVkIiwgR3JlZW46ICJncmVlbiIsIEJsdWU6ICJibHVlIn0pOworSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnMiLCBbeyJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlv
bmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25h
bCI6IHRydWV9LCB7Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlv
bmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9u
YWwiOiB0cnVlfSwgeyJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9u
YWwiOiB0cnVlfSwgeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0
aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInNxbEVycm9yIiwgInR5cGUiOiAib2JqZWN0IiwgIm9w
dGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJzY3JlZW5Db2xvciIsICJ0eXBlIjogInN0cmluZyIs
ICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgInR5cGUiOiAi
b2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUi
OiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwg
InRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9y
IiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOworSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycyIsIFt7Im5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJvYmplY3QiLCAi
b3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJv
cHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIs
ICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIs
ICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJvYmplY3Qi
LCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVt
YmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAic3FsRXJyb3IiLCAidHlwZSI6ICJv
YmplY3QiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJzY3JlZW5Db2xvciIsICJ0eXBl
IjogInN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogImFsdGVybmF0ZUNvbG9y
cyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInByaW50
Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbImNvbHVtbk5h
bWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFz
ZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmlu
dENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiKTsK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFt
ZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xh
c3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFj
a2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsg
bV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5k
RGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRE
aXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5KiBpbl9jb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nKiBjb25zdCBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCBpbl90aW1l
c3RhbXAsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0
IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIGNvbnN0IGluX3BheWxvYWQsIGNvbnN0IGludCog
Y29uc3QgaW5fZGF0YWJhc2VJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIGlu
X3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX3NjcmVlbkNvbG9yLCBjb25zdCBJbnNw
ZWN0b3I6Okluc3BlY3RvckFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyog
Y29uc3QgaW5fcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJy
YXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGlt
ZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgaW5fdmFsdWVzLCBJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYg
aW5fc2NyZWVuQ29sb3IsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGluX2FsdGVy
bmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSA9IDA7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2Fs
bC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisKK2NsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAg
ICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdlbmVyYXRpbmcg
Y29tbWFuZC9ldmVudCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzLgorICAgIGVudW0gY2xh
c3MgUHJpbnRDb2xvciB7CisgICAgICAgIEN5YW4gPSAzLAorICAgICAgICBNYWdlbnRhID0gNCwK
KyAgICAgICAgWWVsbG93ID0gNSwKKyAgICAgICAgQmxhY2sgPSA2LAorICAgIH07IC8vIGVudW0g
Y2xhc3MgUHJpbnRDb2xvcgorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSogb3B0
X2luX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdF9pbl9ub3RlcywgY29uc3Qg
ZG91YmxlKiBjb25zdCBvcHRfaW5fdGltZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdCogb3B0X2luX3ZhbHVlcywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSog
Y29uc3Qgb3B0X2luX3BheWxvYWQsIGNvbnN0IGludCogY29uc3Qgb3B0X2luX2RhdGFiYXNlSWQs
IGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBvcHRfaW5fc3FsRXJyb3IsIGNvbnN0
IFN0cmluZyogY29uc3Qgb3B0X2luX3NjcmVlbkNvbG9yLCBjb25zdCBJbnNwZWN0b3I6Okluc3Bl
Y3RvckFycmF5KiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9w
dF9pbl9wcmludENvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5n
Pj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxT
dHJpbmc+KiBvcHRfb3V0X25vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91
YmxlPiogb3B0X291dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG9wdF9vdXRfdmFsdWVzLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIG9wdF9vdXRfcGF5
bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIG9wdF9vdXRfZGF0YWJh
c2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9v
dXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
KiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYs
IGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBT
dHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIGluX3Bh
eWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBp
bl9wcmludENvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4m
IG91dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFt
cCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIG91dF92YWx1ZXMsIEluc3BlY3Rvcjo6SW5z
cGVjdG9yVmFsdWUqIG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRl
cm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9y
KiBvdXRfcHJpbnRDb2xvcikgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0
ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7
CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAg
IHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBw
YXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
K3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURp
c3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVybmF0
ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxw
dHIgfTsKKyNlbmRpZgorcHJpdmF0ZToKKyAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJh
Y2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAg
ICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRp
b25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNs
dWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYKKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK0RhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI+IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVy
JiBiYWNrZW5kRGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNo
ZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
Z2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkRhdGFiYXNlIiksIHRoaXMp
OworfQorCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVx
dWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNz
YWdlKQoreworICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlz
KTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2Fn
ZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOworCisgICAg
aWYgKG1ldGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIpCisgICAgICAgIGV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMp
KTsKKyAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIp
CisgICAgICAgIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURk1vdmUo
cGFyYW1ldGVycykpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VT
dHJpbmcoJ1wnJywgIkRhdGFiYXNlIiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7
Cit9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJh
bWV0ZXJzKQoreworICAgIGJvb2wgb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPSBmYWxz
ZTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gb3B0X2luX2NvbHVtbk5h
bWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgQVND
SUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCAmb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQp
OworICAgIGJvb2wgb3B0X2luX25vdGVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBTdHJpbmcg
b3B0X2luX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMu
Z2V0KCksIEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgJm9wdF9pbl9ub3Rlc192YWx1ZUZvdW5kKTsK
KyAgICBib29sIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+IG9wdF9pbl90aW1lc3RhbXAgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFs
KCJ0aW1lc3RhbXAiKSwgJm9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCk7CisgICAgYm9vbCBv
cHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IG9wdF9pbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRP
YmplY3QocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgJm9wdF9pbl92
YWx1ZXNfdmFsdWVGb3VuZCk7CisgICAgYm9vbCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID0g
ZmFsc2U7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IG9wdF9pbl9wYXls
b2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgQVND
SUlMaXRlcmFsKCJwYXlsb2FkIiksICZvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kKTsKKyAgICBi
b29sIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBpbnQgb3B0X2lu
X2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMu
Z2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCAmb3B0X2luX2RhdGFiYXNlSWRfdmFs
dWVGb3VuZCk7CisgICAgYm9vbCBvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gb3B0X2luX3NxbEVycm9yID0g
bV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0
ZXJhbCgic3FsRXJyb3IiKSwgJm9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kKTsKKyAgICBib29s
IG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgU3RyaW5nIG9wdF9p
bl9zY3JlZW5Db2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJz
LmdldCgpLCBBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksICZvcHRfaW5fc2NyZWVuQ29sb3Jf
dmFsdWVGb3VuZCk7CisgICAgYm9vbCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQg
PSBmYWxzZTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gb3B0X2luX2Fs
dGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMu
Z2V0KCksIEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksICZvcHRfaW5fYWx0ZXJuYXRl
Q29sb3JzX3ZhbHVlRm91bmQpOworICAgIGJvb2wgb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3Vu
ZCA9IGZhbHNlOworICAgIFN0cmluZyBvcHRfaW5fcHJpbnRDb2xvciA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInByaW50Q29s
b3IiKSwgJm9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQpOworICAgIGlmIChtX2JhY2tlbmRE
aXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CisgICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJh
bXMsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBi
ZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVl
c3RJZCwgb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMu
Z2V0KCkgOiBudWxscHRyLCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMg
OiBudWxscHRyLCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFt
cCA6IG51bGxwdHIsIG9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0
KCkgOiBudWxscHRyLCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQu
Z2V0KCkgOiBudWxscHRyLCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9k
YXRhYmFzZUlkIDogbnVsbHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5f
c3FsRXJyb3IuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/
ICZvcHRfaW5fc2NyZWVuQ29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3Zh
bHVlRm91bmQgPyBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2lu
X3ByaW50Q29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsK
KyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBvdXRf
Y29sdW1uTmFtZXM7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4g
b3V0X25vdGVzOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+IG91
dF90aW1lc3RhbXA7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBvdXRfdmFsdWVzOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkRhdGFiYXNlSWQ+IG91dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5h
dGVDb2xvcnM7CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29s
b3Igb3V0X3ByaW50Q29sb3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVycyhlcnJvciwgb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1u
TmFtZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5f
bm90ZXMgOiBudWxscHRyLCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3Rp
bWVzdGFtcCA6IG51bGxwdHIsIG9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1
ZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3Bh
eWxvYWQuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9w
dF9pbl9kYXRhYmFzZUlkIDogbnVsbHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBv
cHRfaW5fc3FsRXJyb3IuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVG
b3VuZCA/ICZvcHRfaW5fc2NyZWVuQ29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29s
b3JzX3ZhbHVlRm91bmQgPyBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwg
b3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxw
dHIsIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91dF92YWx1
ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsICZvdXRfc2Ny
ZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsICZvdXRfcHJpbnRDb2xvcik7CisKKyAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIGlmIChvdXRfY29sdW1uTmFtZXMpCisgICAg
ICAgICAgICByZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgb3V0
X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgaWYgKG91dF9ub3Rlcy5pc0Fzc2lnbmVkKCkpCisgICAg
ICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG91dF9ub3Rl
cy5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaXNBc3NpZ25lZCgpKQor
ICAgICAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwg
b3V0X3RpbWVzdGFtcC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF92YWx1ZXMuaXNBc3Np
Z25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1
ZXMiKSwgb3V0X3ZhbHVlcy5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF9wYXlsb2FkLmlz
QXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJw
YXlsb2FkIiksIG91dF9wYXlsb2FkLmdldFZhbHVlKCkpOworICAgICAgICBpZiAob3V0X2RhdGFi
YXNlSWQuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKEFTQ0lJ
TGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBvdXRfZGF0YWJhc2VJZC5nZXRWYWx1ZSgpKTsKKyAgICAg
ICAgaWYgKG91dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJ
TGl0ZXJhbCgic3FsRXJyb3IiKSwgb3V0X3NxbEVycm9yKTsKKyAgICAgICAgaWYgKG91dF9zY3Jl
ZW5Db2xvci5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIG91dF9zY3JlZW5Db2xvci5nZXRWYWx1ZSgpKTsKKyAg
ICAgICAgaWYgKG91dF9hbHRlcm5hdGVDb2xvcnMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFy
cmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIG91dF9hbHRlcm5hdGVDb2xvcnMp
OworICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIG91dF9wcmludENv
bG9yLmdldFZhbHVlKCkpOworICAgIH0KKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJl
c3VsdCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3Ip
KTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFy
YW1ldGVycykKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gaW5fY29s
dW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgp
LCBBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG51bGxwdHIpOworICAgIFN0cmluZyBpbl9u
b3RlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBB
U0NJSUxpdGVyYWwoIm5vdGVzIiksIG51bGxwdHIpOworICAgIGRvdWJsZSBpbl90aW1lc3RhbXAg
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlM
aXRlcmFsKCJ0aW1lc3RhbXAiKSwgbnVsbHB0cik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiBpbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3Qo
cGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgbnVsbHB0cik7CisgICAg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IGluX3BheWxvYWQgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInBheWxv
YWQiKSwgbnVsbHB0cik7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRj
aGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJ
ZCIpLCBudWxscHRyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGlu
X3NxbEVycm9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0
KCksIEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX3Nj
cmVlbkNvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0
KCksIEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgbnVsbHB0cik7CisgICAgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGluX2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiYWx0ZXJu
YXRlQ29sb3JzIiksIG51bGxwdHIpOworICAgIFN0cmluZyBpbl9wcmludENvbG9yID0gbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgi
cHJpbnRDb2xvciIpLCBudWxscHRyKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFz
UHJvdG9jb2xFcnJvcnMoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBTdHJpbmc6OmZv
cm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwg
IkRhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
ICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyLT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElkLCAqaW5fY29sdW1u
TmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3RhbXAsICppbl92YWx1ZXMsICppbl9wYXlsb2FkLCBp
bl9kYXRhYmFzZUlkLCAqaW5fc3FsRXJyb3IsIGluX3NjcmVlbkNvbG9yLCAqaW5fYWx0ZXJuYXRl
Q29sb3JzLCBpbl9wcmludENvbG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgor
CisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOworICAgIFN0cmluZyBvdXRfbm90
ZXM7CisgICAgZG91YmxlIG91dF90aW1lc3RhbXA7CisgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Qgb3V0X3ZhbHVlczsKKyAgICBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIG91dF9wYXls
b2FkOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpEYXRhYmFzZUlkIG91dF9k
YXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7CisgICAgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Cisg
ICAgbV9hZ2VudC0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGVycm9yLCAqaW5fY29sdW1u
TmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3RhbXAsICppbl92YWx1ZXMsICppbl9wYXlsb2FkLCBp
bl9kYXRhYmFzZUlkLCAqaW5fc3FsRXJyb3IsIGluX3NjcmVlbkNvbG9yLCAqaW5fYWx0ZXJuYXRl
Q29sb3JzLCBpbl9wcmludENvbG9yLCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRf
dGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0
X3NxbEVycm9yLCAmb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCAmb3V0X3By
aW50Q29sb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgeworICAgICAgICByZXN1bHQt
PnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgb3V0X2NvbHVtbk5hbWVzKTsK
KyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBvdXRfbm90
ZXMpOworICAgICAgICByZXN1bHQtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIp
LCBvdXRfdGltZXN0YW1wKTsKKyAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJ2YWx1ZXMiKSwgb3V0X3ZhbHVlcyk7CisgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlM
aXRlcmFsKCJwYXlsb2FkIiksIG91dF9wYXlsb2FkKTsKKyAgICAgICAgcmVzdWx0LT5zZXRJbnRl
Z2VyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBvdXRfZGF0YWJhc2VJZCk7CisgICAgICAg
IHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgb3V0X3NxbEVycm9y
KTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIp
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
b3V0X3NjcmVlbkNvbG9yKSk7CisgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFs
KCJhbHRlcm5hdGVDb2xvcnMiKSwgb3V0X2FsdGVybmF0ZUNvbG9ycyk7CisgICAgICAgIHJlc3Vs
dC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3ByaW50Q29sb3IpKTsK
KyAgICB9CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICBlbHNl
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJl
dHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRl
bmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIkluc3BlY3RvckZyb250
ZW5kUm91dGVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wg
eworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7CitjbGFz
cyBFcnJvcjsKK2VudW0gY2xhc3MgUHJpbWFyeUNvbG9yczsKK30gLy8gRGF0YWJhc2UKKy8vIEVu
ZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBE
YXRhYmFzZSB7CisvKiBVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuICovCit0
eXBlZGVmIGludCBEYXRhYmFzZUlkOwordHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gQ29sb3JMaXN0
OworfSAvLyBEYXRhYmFzZQorLy8gRW5kIG9mIHR5cGVkZWZzLgorCituYW1lc3BhY2UgVGVzdEhl
bHBlcnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUp
Cit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51
bVZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBE
YXRhYmFzZSB7CisvKiAgKi8KK2VudW0gY2xhc3MgUHJpbWFyeUNvbG9ycyB7CisgICAgUmVkID0g
MCwKKyAgICBHcmVlbiA9IDEsCisgICAgQmx1ZSA9IDIsCit9OyAvLyBlbnVtIGNsYXNzIFByaW1h
cnlDb2xvcnMKKy8qIERhdGFiYXNlIGVycm9yLiAqLworY2xhc3MgRXJyb3IgOiBwdWJsaWMgSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAg
ICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAorICAgICAg
ICBDb2RlU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8
IENvZGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBC
dWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBt
X3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAg
ICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAg
ICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJv
cjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBz
ZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJl
YWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
bWVzc2FnZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VT
ZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNl
dENvZGUoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJjb2RlIiksIHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3JP
YmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1cm4g
V1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJnJlc3VsdCkpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAg
ICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRN
ZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVsZWFz
ZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gRGF0YWJhc2UKKworCisKK25hbWVzcGFj
ZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Citz
dGQ6Om9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhj
b25zdCBTdHJpbmcmKTsKKworLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCit0ZW1w
bGF0ZTw+CitzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYpOworCit9IC8vIG5hbWVzcGFj
ZSBUZXN0SGVscGVycworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVy
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCituYW1lc3BhY2Ug
VGVzdEhlbHBlcnMgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92
YWx1ZXNbXSA9IHsKKyAgICAicmVkIiwKKyAgICAiZ3JlZW4iLAorICAgICJibHVlIiwKKyAgICAi
Y3lhbiIsCisgICAgIm1hZ2VudGEiLAorICAgICJ5ZWxsb3ciLAorICAgICJibGFjayIsCit9Owor
CitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51
bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKy8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2Un
IERvbWFpbgordGVtcGxhdGU8Pgorc3RkOjpvcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmIHByb3Rv
Y29sU3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9
IHsKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9yczo6UmVkLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzOjpHcmVlbiwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6Qmx1ZSwKKyAgICB9OworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQorICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0g
ZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAgICAgICAgcmV0
dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyljb25zdGFu
dFZhbHVlc1tpXTsKKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKKworfSAvLyBuYW1l
c3BhY2UgVGVzdEhlbHBlcnMKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwt
Y2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bw
cm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgewor
cHVibGljOgorICAgIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGlkPFRl
c3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0g
aGFuZGxlcjsgfQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
KGxvbmcgcmVxdWVzdElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5KiBpbl9jb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25zdCBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBjb25z
dCBpbl90aW1lc3RhbXAsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBpbl92YWx1
ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIGNvbnN0IGluX3BheWxvYWQsIGNv
bnN0IGludCogY29uc3QgaW5fZGF0YWJhc2VJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX3NjcmVlbkNvbG9yLCBj
b25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0
IFN0cmluZyogY29uc3QgaW5fcHJpbnRDb2xvcikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSW5zcGVj
dG9yOjpJbnNwZWN0b3JBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90
ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
JiBpbl92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBpbl9zcWxFcnJv
ciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0
b3JBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3Ip
IG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRGF0YWJh
c2VEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVy
bi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0Fs
dGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7
CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBp
ZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IF9kYXRhYmFzZUhhbmRsZXI7Cit9
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVy
KTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpZGVhbGxvYworeworICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOworICAg
IFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXREYXRhYmFzZUhhbmRsZXI6KGlkPFRl
c3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5k
bGVyID09IF9kYXRhYmFzZUhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfZGF0YWJh
c2VIYW5kbGVyIHJlbGVhc2VdOworICAgIF9kYXRhYmFzZUhhbmRsZXIgPSBbaGFuZGxlciByZXRh
aW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxP
YmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0
byBhbHRlcm5hdGVBZ2VudCA9IHN0ZDo6bWFrZV91bmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxl
QWdlbnQ8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcj4+KEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgKl9jb250cm9sbGVyLCBXVEZN
b3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFB
Z2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbERh
dGFiYXNlRG9tYWluSGFuZGxlcj4pZGF0YWJhc2VIYW5kbGVyCit7CisgICAgcmV0dXJuIF9kYXRh
YmFzZUhhbmRsZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0
aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wu
aD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9t
aWMsIHJldGFpbiwgc2V0dGVyPXNldERhdGFiYXNlSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERh
dGFiYXNlRG9tYWluSGFuZGxlcj4gZGF0YWJhc2VIYW5kbGVyOworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1
ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBy
ZXF1ZXN0SWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkqIGluX2NvbHVtbk5hbWVz
LCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX25vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IGluX3Rp
bWVzdGFtcCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIGluX3ZhbHVlcywgY29u
c3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogY29uc3QgaW5fcGF5bG9hZCwgY29uc3QgaW50
KiBjb25zdCBpbl9kYXRhYmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCog
aW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IElu
c3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5n
KiBjb25zdCBpbl9wcmludENvbG9yKQoreworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3Ry
aW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAg
fTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
Y29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90
b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQs
IGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKKyAgICAgICAg
UmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVS
KGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5
bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVy
bmF0ZUNvbG9ycyIpOworICAgICAgICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1
bHRPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgaW5zcGVjdG9y
U3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7CisgICAgICAgIGlmIChub3RlcykKKyAgICAgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgKm5vdGVz
KTsKKyAgICAgICAgaWYgKHRpbWVzdGFtcCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksICp0aW1lc3RhbXApOworICAgICAgICBp
ZiAodmFsdWVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRl
cmFsKCJ2YWx1ZXMiKSwgWyp2YWx1ZXMgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICAgICAgaWYg
KHBheWxvYWQpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJh
bCgicGF5bG9hZCIpLCBbKnBheWxvYWQgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICAgICAgaWYg
KGRhdGFiYXNlSWQpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoQVNDSUlM
aXRlcmFsKCJkYXRhYmFzZUlkIiksICpkYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKHNxbEVycm9y
KQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxF
cnJvciIpLCBbKnNxbEVycm9yIHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgICAgIGlmIChzY3Jl
ZW5Db2xvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgic2NyZWVuQ29sb3IiKSwgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsKKyAgICAg
ICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJy
YXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXko
KmFsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBpZiAocHJpbnRDb2xvcikKKyAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCB0b1By
b3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSk7CisgICAgfTsK
KworICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lczsKKyAgICBpZiAo
aW5fY29sdW1uTmFtZXMpCisgICAgICAgIG9faW5fY29sdW1uTmFtZXMgPSBvYmpjU3RyaW5nQXJy
YXkoaW5fY29sdW1uTmFtZXMpOworICAgIE5TU3RyaW5nICpvX2luX25vdGVzOworICAgIGlmIChp
bl9ub3RlcykKKyAgICAgICAgb19pbl9ub3RlcyA9ICppbl9ub3RlczsKKyAgICBkb3VibGUgb19p
bl90aW1lc3RhbXA7CisgICAgaWYgKGluX3RpbWVzdGFtcCkKKyAgICAgICAgb19pbl90aW1lc3Rh
bXAgPSAqaW5fdGltZXN0YW1wOworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl92YWx1
ZXM7CisgICAgaWYgKGluX3ZhbHVlcykKKyAgICAgICAgb19pbl92YWx1ZXMgPSBbW1tSV0lQcm90
b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0OmluX3ZhbHVlc10g
YXV0b3JlbGVhc2VdOworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2FkOwor
ICAgIGlmIChpbl9wYXlsb2FkKQorICAgICAgICBvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2Nv
bEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0OmluX3BheWxvYWRdIGF1
dG9yZWxlYXNlXTsKKyAgICBpbnQgb19pbl9kYXRhYmFzZUlkOworICAgIGlmIChpbl9kYXRhYmFz
ZUlkKQorICAgICAgICBvX2luX2RhdGFiYXNlSWQgPSAqaW5fZGF0YWJhc2VJZDsKKyAgICBUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2luX3NxbEVycm9yOworICAgIGlmIChpbl9zcWxFcnJv
cikKKyAgICAgICAgb19pbl9zcWxFcnJvciA9IFtbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
YWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0OmluX3NxbEVycm9yXSBhdXRvcmVsZWFzZV07
CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIG9faW5fc2NyZWVuQ29sb3I7
CisgICAgaWYgKGluX3NjcmVlbkNvbG9yKQorICAgICAgICBvX2luX3NjcmVlbkNvbG9yID0gZnJv
bVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oKmluX3Nj
cmVlbkNvbG9yKTsKKyAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fYWx0ZXJuYXRlQ29s
b3JzOworICAgIGlmIChpbl9hbHRlcm5hdGVDb2xvcnMpCisgICAgICAgIG9faW5fYWx0ZXJuYXRl
Q29sb3JzID0gb2JqY1N0cmluZ0FycmF5KGluX2FsdGVybmF0ZUNvbG9ycyk7CisgICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciBvX2lu
X3ByaW50Q29sb3I7CisgICAgaWYgKGluX3ByaW50Q29sb3IpCisgICAgICAgIG9faW5fcHJpbnRD
b2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPigqaW5fcHJpbnRDb2xvcik7CisKKyAgICBbbV9k
ZWxlZ2F0ZSBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6ZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihp
bl9jb2x1bW5OYW1lcyA/ICZvX2luX2NvbHVtbk5hbWVzIDogbmlsKSBub3RlczooaW5fbm90ZXMg
PyAmb19pbl9ub3RlcyA6IG5pbCkgdGltZXN0YW1wOihpbl90aW1lc3RhbXAgPyAmb19pbl90aW1l
c3RhbXAgOiBuaWwpIHZhbHVlczooaW5fdmFsdWVzID8gJm9faW5fdmFsdWVzIDogbmlsKSBwYXls
b2FkOihpbl9wYXlsb2FkID8gJm9faW5fcGF5bG9hZCA6IG5pbCkgZGF0YWJhc2VJZDooaW5fZGF0
YWJhc2VJZCA/ICZvX2luX2RhdGFiYXNlSWQgOiBuaWwpIHNxbEVycm9yOihpbl9zcWxFcnJvciA/
ICZvX2luX3NxbEVycm9yIDogbmlsKSBzY3JlZW5Db2xvcjooaW5fc2NyZWVuQ29sb3IgPyAmb19p
bl9zY3JlZW5Db2xvciA6IG5pbCkgYWx0ZXJuYXRlQ29sb3JzOihpbl9hbHRlcm5hdGVDb2xvcnMg
PyAmb19pbl9hbHRlcm5hdGVDb2xvcnMgOiBuaWwpIHByaW50Q29sb3I6KGluX3ByaW50Q29sb3Ig
PyAmb19pbl9wcmludENvbG9yIDogbmlsKV07Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJl
cXVlc3RJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYgaW5fY29sdW1uTmFtZXMs
IGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBpbl92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29u
c3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBT
dHJpbmcmIGluX3ByaW50Q29sb3IpCit7CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJp
bmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9
OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNv
bHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBk
YXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yIHByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAi
Y29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJB
TUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJy
b3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0
ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICByZXN1bHRPYmplY3Qt
PnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgaW5zcGVjdG9yU3RyaW5nQXJy
YXkoY29sdW1uTmFtZXMpKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91Ymxl
KEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHRpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIFt2YWx1ZXMgdG9JbnNwZWN0
b3JPYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwo
InBheWxvYWQiKSwgW3BheWxvYWQgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBkYXRhYmFzZUlk
KTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJv
ciIpLCBbc3FsRXJyb3IgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCB0b1Byb3RvY29sU3RyaW5n
KHNjcmVlbkNvbG9yKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRl
cmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29s
b3JzKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJp
bnRDb2xvciIpLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmpl
Y3QpKTsKKyAgICB9OworCisgICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2NvbHVtbk5h
bWVzID0gb2JqY1N0cmluZ0FycmF5KCZpbl9jb2x1bW5OYW1lcyk7CisgICAgTlNTdHJpbmcgKm9f
aW5fbm90ZXMgPSBpbl9ub3RlczsKKyAgICBkb3VibGUgb19pbl90aW1lc3RhbXAgPSBpbl90aW1l
c3RhbXA7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3ZhbHVlcyA9IFtbW1JXSVBy
b3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6JmluX3ZhbHVl
c10gYXV0b3JlbGVhc2VdOworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2Fk
ID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVj
dDomaW5fcGF5bG9hZF0gYXV0b3JlbGVhc2VdOworICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBp
bl9kYXRhYmFzZUlkOworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKm9faW5fc3FsRXJy
b3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEluc3BlY3Rv
ck9iamVjdDomaW5fc3FsRXJyb3JdIGF1dG9yZWxlYXNlXTsKKyAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnMgb19pbl9zY3JlZW5Db2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KGluX3NjcmVlbkNvbG9yKTsKKyAgICBO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fYWx0ZXJuYXRlQ29sb3JzID0gb2JqY1N0cmluZ0Fy
cmF5KCZpbl9hbHRlcm5hdGVDb2xvcnMpOworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciBvX2luX3ByaW50Q29sb3IgPSBmcm9tUHJv
dG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yPihpbl9wcmludENvbG9yKTsKKworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczpvX2luX2NvbHVtbk5hbWVzIG5v
dGVzOm9faW5fbm90ZXMgdGltZXN0YW1wOm9faW5fdGltZXN0YW1wIHZhbHVlczpvX2luX3ZhbHVl
cyBwYXlsb2FkOm9faW5fcGF5bG9hZCBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBzcWxFcnJv
cjpvX2luX3NxbEVycm9yIHNjcmVlbkNvbG9yOm9faW5fc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29s
b3JzOm9faW5fYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6b19pbl9wcmludENvbG9yXTsKK30K
KworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2
ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVz
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRo
LW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisK
K0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOworCisKK3R5cGVkZWYgTlNfRU5VTShO
U0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycykgeworICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZCwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnNHcmVlbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnNCbHVlLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgeworICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFu
LAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrLAorfTsKKwordHlwZWRl
ZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAorICAg
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvckJsYWNrLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
KSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yQ3lhbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKKyAgICBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKK307
CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4sCisgICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50
YSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2ssCit9OworCisKK19fYXR0cmlidXRlX18oKHZpc2li
aWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
IDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2Fk
OihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29k
ZTooaW50KWNvZGU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkg
TlNTdHJpbmcgKm1lc3NhZ2U7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywg
YXNzaWduKSBpbnQgY29kZTsKK0BlbmQKKworQHByb3RvY29sIFRlc3RQcm90b2NvbERhdGFiYXNl
RG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAcmVxdWlyZWQKKy0gKHZvaWQpZXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJv
cikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3Ry
aW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1w
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNx
bEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1
Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWNvbHVt
bk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSAqKXRpbWVz
dGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKil2YWx1ZXMgcGF5bG9hZDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICoqKXBheWxvYWQgZGF0YWJhc2VJZDooaW50ICopZGF0YWJhc2VJ
ZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5D
b2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICopc2NyZWVuQ29sb3IgYWx0
ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHBy
aW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3IgKilwcmludENvbG9yOworLSAodm9pZClleGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29s
dW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRh
dGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5h
bWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcg
Kilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpT
T05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9h
ZCBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnMpc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKXByaW50Q29sb3I7CitAZW5kCisKKwor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+
CitPYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwor
CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnMgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ6CisgICAgICAgIHJldHVybiBBU0NJSUxp
dGVyYWwoInJlZCIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
R3JlZW46CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImdyZWVuIik7CisgICAgY2FzZSBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlOgorICAgICAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCJibHVlIik7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgVGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAicmVkIikKKyAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDsKKyAgICBpZiAodmFsdWUgPT0gImdy
ZWVuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dy
ZWVuOworICAgIGlmICh2YWx1ZSA9PSAiYmx1ZSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ7Cit9CisKK2lu
bGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1
ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImN5YW4i
KTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJtYWdl
bnRhIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yWWVsbG93OgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ5
ZWxsb3ciKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
YmxhY2siKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCisg
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQorICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvck1hZ2VudGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKKyAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JCbGFjazsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47Cit9
CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHZhbHVlKQoreworICAgIHN3aXRj
aCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwo
ImN5YW4iKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFs
KCJtYWdlbnRhIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgorICAgICAgICByZXR1cm4gQVNDSUlMaXRl
cmFsKCJ5ZWxsb3ciKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0
ZXJhbCgiYmxhY2siKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lh
biIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQor
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKKyAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JCbGFjazsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5
YW47Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAg
c3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRl
cmFsKCJjeWFuIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRl
cmFsKCJtYWdlbnRhIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiBBU0NJSUxp
dGVyYWwoInllbGxvdyIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiBBU0NJSUxp
dGVyYWwoImJsYWNrIik7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lh
biIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisg
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKKyAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvckJsYWNrOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOwor
fQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHZhbHVlKQoreworICAgIHN3aXRj
aCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
Y3lhbiIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
bWFnZW50YSIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFs
KCJ5ZWxsb3ciKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFs
KCJibGFjayIpOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQor
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQorICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JC
bGFjazsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
b3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNl
RG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihO
U051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3Bh
cnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWlu
KQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilw
YXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBA
KEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9ycz4ocGF5bG9hZCkpOworfQorCisrICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7Cisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3Ry
aW5nPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAg
ICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRo
UGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0
aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW1wb3J0IDx3
dGYvQXNzZXJ0aW9ucy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKK0BpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBh
eWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9h
ZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7CisgICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtA
Im1lc3NhZ2UiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7CisgICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJj
b2RlIl0gaW50ZWdlclZhbHVlXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVj
dAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W2pz
b25PYmplY3QgdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2Fn
ZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlCit7CisgICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOworCisgICAgc2Vs
Zi5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICBzZWxmLmNvZGUgPSBjb2RlOworCisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCit7Cisg
ICAgW3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAo
TlNTdHJpbmcgKiltZXNzYWdlCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJt
ZXNzYWdlIl07Cit9CisKKy0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKK3sKKyAgICBbc3VwZXIg
c2V0SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUiXTsKK30KKworLSAoaW50KWNvZGUKK3sKKyAg
ICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Cit9CisKK0BlbmQKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21h
aW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWlu
cy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OGUx
Y2U2MjA0ZGNjN2E3YzdlYTVhMGQ5NjU3YTg4Mjk5ZGVjMDM2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdApAQCAt
MCwwICsxLDEzOTggQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWlu
Zy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworLy8gTmV0d29yazEuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgi
TmV0d29yazEubG9hZFJlc291cmNlMSIsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2
YXRlRG9tYWluKCJOZXR3b3JrMSIpOworCisvLyBOZXR3b3JrMy4KK0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UxIiwgW10sIFtdKTsKK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UyIiwgW10s
IFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVz
b3VyY2UzIiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3
b3JrMy5sb2FkUmVzb3VyY2U0IiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJD
b21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U1IiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U2IiwgW10sIFtdKTsKK0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U3Iiwg
W10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmszIik7Cisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hl
cihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNw
YXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBi
YWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0
KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmRE
aXNwYXRjaGVyOworfTsKKworCitjbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQpID0gMDsKK307CitjbGFzcyBBbHRl
cm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBj
YWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihsb25nIGNhbGxJZCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgbG9hZFJlc291cmNlNShsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBsb2FkUmVzb3VyY2U2KGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZTcobG9uZyBjYWxsSWQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisj
IyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFs
dGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI7CitjbGFzcyBBbHRlcm5hdGVOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorCitjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9
IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIoKTsKK307CisKK2NsYXNzIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShFcnJvclN0cmluZyYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihFcnJvclN0cmluZyYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMyhFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgbG9hZFJlc291cmNlNChFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgbG9hZFJlc291cmNlNShFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9h
ZFJlc291cmNlNihFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlNyhFcnJvclN0cmluZyYpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5OZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVh
dGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAg
ICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0
ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBB
bHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIg
eyBudWxscHRyIH07CisjZW5kaWYKK3ByaXZhdGU6CisgICAgTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Kik7CisgICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxs
cHRyIH07Cit9OworCitjbGFzcyBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVi
bGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYs
IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+
JiYgbWVzc2FnZSkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIHZvaWQgbG9hZFJlc291cmNlMShs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAg
ICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJl
c291cmNlNChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0
ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZv
aWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
JiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0
ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVy
bmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51
bGxwdHIgfTsKKyNlbmRpZgorcHJpdmF0ZToKKyAgICBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
KEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
KyAgICBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIg
fTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCitOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CitOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6fk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUo
QmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tl
bmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJOZXR3b3Jr
MSIpLCB0aGlzKTsKK30KKwordm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmpl
Y3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJv
dGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzOwor
ICAgIG1lc3NhZ2UtPmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJz
KTsKKworICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZTEiKQorICAgICAgICBsb2FkUmVz
b3VyY2UxKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgZWxzZQorICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiTmV0d29yazEiLCAnLicsIG1l
dGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKK30KKwordm9pZCBOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
ICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyLT5sb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisjZW5kaWYKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9h
ZFJlc291cmNlMShlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3Vs
dCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsK
K30KKworUmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2Vu
dCkpOworfQorCitOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxp
dGVyYWwoIk5ldHdvcmszIiksIHRoaXMpOworfQorCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVm
PEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1z
IiksIHBhcmFtZXRlcnMpOworCisgICAgdHlwZWRlZiB2b2lkIChOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYmIG1lc3NhZ2UpOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVy
PiBEaXNwYXRjaE1hcDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGlzcGF0Y2hNYXA+IGRp
c3BhdGNoTWFwOworICAgIGlmIChkaXNwYXRjaE1hcC5nZXQoKS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IHN0cnVjdCBNZXRob2RUYWJsZSB7CisgICAgICAgICAgICBjb25zdCBj
aGFyKiBuYW1lOworICAgICAgICAgICAgQ2FsbEhhbmRsZXIgaGFuZGxlcjsKKyAgICAgICAgfSBj
b21tYW5kc1tdID0geworICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMSIsICZOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxIH0sCisgICAgICAgICAgICB7ICJsb2FkUmVz
b3VyY2UyIiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIgfSwKKyAg
ICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTMiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlMyB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNCIsICZOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0IH0sCisgICAgICAgICAgICB7ICJsb2Fk
UmVzb3VyY2U1IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUgfSwK
KyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTYiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6bG9hZFJlc291cmNlNiB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNyIsICZOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3IH0sCisgICAgICAgIH07CisgICAg
ICAgIHNpemVfdCBsZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNvbW1hbmRzKTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGRpc3BhdGNo
TWFwLmdldCgpLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKKyAg
ICB9CisKKyAgICBhdXRvIGZpbmRSZXN1bHQgPSBkaXNwYXRjaE1hcC5nZXQoKS5maW5kKG1ldGhv
ZCk7CisgICAgaWYgKGZpbmRSZXN1bHQgPT0gZGlzcGF0Y2hNYXAuZ2V0KCkuZW5kKCkpIHsKKyAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIk5ldHdvcmszIiwgJy4n
LCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAoKCp0aGlzKS4qZmluZFJlc3VsdC0+dmFsdWUpKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJh
bWV0ZXJzKSk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291
cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikKK3sKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5h
dGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291
cmNlMShyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBF
cnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoZXJyb3Ip
OworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMihyZXF1ZXN0SWQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTIoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
V1RGTW92ZShyZXN1bHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZN
b3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikKK3sKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRl
cm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJl
c291cmNlMyhyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAg
ICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTMoZXJy
b3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICBlbHNl
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNChyZXF1ZXN0SWQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTQoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBX
VEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlNShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikKK3sK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9h
bHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9h
ZFJlc291cmNlNShyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisK
KyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTUo
ZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICBl
bHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQg
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAg
ICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNihyZXF1ZXN0SWQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTYoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikK
K3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
bG9hZFJlc291cmNlNyhyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlm
CisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJj
ZTcoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKKyAg
ICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29t
bWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91
dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5
cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworLy8gVHlwZWRlZnMuCituYW1l
c3BhY2UgTmV0d29yazIgeworLyogVW5pcXVlIGxvYWRlciBpZGVudGlmaWVyLiAqLwordHlwZWRl
ZiBTdHJpbmcgTG9hZGVySWQ7Cit9IC8vIE5ldHdvcmsyCisvLyBFbmQgb2YgdHlwZWRlZnMuCisK
KworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
bmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5n
LWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wg
VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyOworQHByb3RvY29sIFRlc3RQcm90b2Nv
bE5ldHdvcmszRG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xh
c3MgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgT2JqQ0lu
c3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazFE
b21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdmly
dHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRlOworcHJpdmF0
ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPj4g
bV9kZWxlZ2F0ZTsKK307CisKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyIHsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxl
Z2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJl
cXVlc3RJZCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBy
ZXF1ZXN0SWQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcg
cmVxdWVzdElkKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChsb25n
IHJlcXVlc3RJZCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUobG9u
ZyByZXF1ZXN0SWQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2KGxv
bmcgcmVxdWVzdElkKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNyhs
b25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0
UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWlu
Zy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Cit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAg
ICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IF9uZXR3b3JrMUhhbmRsZXI7
CisgICAgaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiBfbmV0d29yazNIYW5k
bGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29u
dHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxm
OworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX25ldHdvcmsxSGFuZGxlciByZWxlYXNl
XTsKKyAgICBbX25ldHdvcmszSGFuZGxlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107
Cit9CisKKy0gKHZvaWQpc2V0TmV0d29yazFIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3Jr
MURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29yazFI
YW5kbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBbX25ldHdvcmsxSGFuZGxlciByZWxlYXNl
XTsKKyAgICBfbmV0d29yazFIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8g
YWx0ZXJuYXRlRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQg
PSBzdGQ6Om1ha2VfdW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+PihBU0NJ
SUxpdGVyYWwoIk5ldHdvcmsxIiksICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNw
YXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRl
cm5hdGVBZ2VudCkpOworfQorCistIChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRs
ZXI+KW5ldHdvcmsxSGFuZGxlcgoreworICAgIHJldHVybiBfbmV0d29yazFIYW5kbGVyOworfQor
CistICh2b2lkKXNldE5ldHdvcmszSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21h
aW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmszSGFuZGxl
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19uZXR3b3JrM0hhbmRsZXIgcmVsZWFzZV07Cisg
ICAgX25ldHdvcmszSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVy
bmF0ZURpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gc3Rk
OjptYWtlX3VuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyLCBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPj4oQVNDSUlMaXRl
cmFsKCJOZXR3b3JrMyIpLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hl
cikpOworICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRl
QWdlbnQpKTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPilu
ZXR3b3JrM0hhbmRsZXIKK3sKKyAgICByZXR1cm4gX25ldHdvcmszSGFuZGxlcjsKK30KKworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09i
amVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmsxSGFu
ZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gbmV0d29yazFIYW5k
bGVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmszSGFu
ZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4gbmV0d29yazNIYW5k
bGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21t
YW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE9iakNJ
bnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVx
dWVzdElkKQoreworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1
Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH07CisKKyAg
ICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworCisKKwordm9pZCBPYmpD
SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJl
cXVlc3RJZCkKK3sKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9OworCisg
ICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKK3ZvaWQgT2JqQ0luc3Bl
Y3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0
SWQpCit7CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vz
c0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfTsKKworICAgIFtt
X2RlbGVnYXRlIGxvYWRSZXNvdXJjZTJXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkKQor
eworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxs
YmFjayA9IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH07CisKKyAgICBbbV9kZWxl
Z2F0ZSBsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNz
Q2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCkKK3sKKyAg
ICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sg
PSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUg
bG9hZFJlc291cmNlNFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQpCit7CisgICAgaWQg
ZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRS
ZXNvdXJjZTVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkKQoreworICAgIGlkIGVycm9y
Q2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3Vy
Y2U2V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrXTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZCBlcnJvckNhbGxi
YWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpKTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlN1dp
dGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxs
YmFja107Cit9CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworCisKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
cy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgor
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisK
KworCisKKworQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlciA8TlNP
YmplY3Q+CitAcmVxdWlyZWQKKy0gKHZvaWQpbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
KHZvaWQoXikoKSlzdWNjZXNzQ2FsbGJhY2s7CitAZW5kCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9j
b2xOZXR3b3JrM0RvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQHJlcXVpcmVkCistICh2b2lkKWxv
YWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKCkpc3VjY2Vzc0NhbGxiYWNrOwor
LSAodm9pZClsb2FkUmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcg
KmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSgpKXN1Y2Nlc3ND
YWxsYmFjazsKKy0gKHZvaWQpbG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4p
KE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXiko
KSlzdWNjZXNzQ2FsbGJhY2s7CistICh2b2lkKWxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFj
azoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNr
Oih2b2lkKF4pKCkpc3VjY2Vzc0NhbGxiYWNrOworLSAodm9pZClsb2FkUmVzb3VyY2U1V2l0aEVy
cm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazoodm9pZCheKSgpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpbG9hZFJlc291
cmNlNldpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoKSlzdWNjZXNzQ2FsbGJhY2s7CistICh2b2lk
KWxvYWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3Ip
KWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKCkpc3VjY2Vzc0NhbGxiYWNr
OworQGVuZAorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21h
aW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPYmpDRW51
bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKKworCisK
KworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsxRG9tYWlu
KQorCitAZW5kCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29y
azJEb21haW4pCisKKysgKHZvaWQpX3BhcnNlTG9hZGVySWQ6KE5TU3RyaW5nICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCitAaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazNEb21haW4pCisKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazFEb21haW4pCisKK0BlbmQK
K0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsyRG9t
YWluKQorCisrICh2b2lkKV9wYXJzZUxvYWRlcklkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICop
cGF5bG9hZDsKK30KKworQGVuZAorQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoTmV0d29yazNEb21haW4pCisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgt
dmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbXBvcnQgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZW51
bS12YWx1ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mYTA1NTNjODBlYTc3M2NiNTZjNWU1ZmM5OTJhMjY4Mzg1NWM1NTNiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMjcz
IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBUeXBlRG9tYWluLgorSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckVudW0oIlR5cGVEb21haW4uVHlwZURvbWFpbkVudW0iLCB7U2hhcmVk
OiAic2hhcmVkIiwgUmVkOiAicmVkIiwgR3JlZW46ICJncmVlbiIsIEJsdWU6ICJibHVlIn0pOwor
CisvLyBDb21tYW5kRG9tYWluLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkNv
bW1hbmREb21haW4uY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiLCBbXSwgWyJyZXR1cm5WYWx1
ZSJdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkNvbW1hbmREb21haW4iKTsK
KworLy8gRXZlbnREb21haW4uCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnREb21haW5E
aXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmlu
ZChJbnNwZWN0b3JCYWNrZW5kLCAiRXZlbnREb21haW4iKTsKK0luc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJFbnVtKCJFdmVudERvbWFpbi5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyIiwg
e1NoYXJlZDogInNoYXJlZCIsIEJsYWNrOiAiYmxhY2siLCBXaGl0ZTogIndoaXRlIn0pOworSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFy
YW1ldGVyIiwgWyJwYXJhbWV0ZXIiXSk7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWlu
KCJFdmVudERvbWFpbiIpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJl
ZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNo
ZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tl
bmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsg
fQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3Bh
dGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB+QWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgY2FsbElkKSA9
IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBF
cnJvclN0cmluZzsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorY2xhc3MgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1l
ZCBhZnRlciBwYXJhbWV0ZXIgJ3JldHVyblZhbHVlJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQv
ZXZlbnQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUuCisgICAgZW51bSBjbGFzcyBSZXR1cm5W
YWx1ZSB7CisgICAgICAgIFNoYXJlZCA9IDAsCisgICAgICAgIEN5YW4gPSA2LAorICAgICAgICBN
YWdlbnRhID0gNywKKyAgICAgICAgWWVsbG93ID0gOCwKKyAgICB9OyAvLyBlbnVtIGNsYXNzIFJl
dHVyblZhbHVlCisgICAgdmlydHVhbCB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKEVy
cm9yU3RyaW5nJiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmV0dXJu
VmFsdWUqIG91dF9yZXR1cm5WYWx1ZSkgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkNv
bW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIENvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNr
ZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIENvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdl
KSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1
ZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAg
ICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlQ29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRy
IH07CisjZW5kaWYKK3ByaXZhdGU6CisgICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KEJhY2tlbmREaXNwYXRjaGVyJiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciopOworICAgIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQg
eyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0t
dmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK0Nv
bW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Db21tYW5kRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxDb21tYW5kRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI+IENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNw
YXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIENvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxp
dGVyYWwoIkNvbW1hbmREb21haW4iKSwgdGhpcyk7Cit9CisKK3ZvaWQgQ29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8Q29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJ
TGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiY29t
bWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiKQorICAgICAgICBjb21tYW5kV2l0aEVudW1SZXR1cm5W
YWx1ZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGVsc2UKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIkNvbW1hbmREb21haW4iLCAnLics
IG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKK30KKwordm9pZCBDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShy
ZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBFcnJvclN0
cmluZyBlcnJvcjsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOworICAgIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OlJldHVyblZhbHVlIG91dF9yZXR1cm5WYWx1ZTsKKyAgICBtX2FnZW50LT5jb21tYW5kV2l0
aEVudW1SZXR1cm5WYWx1ZShlcnJvciwgJm91dF9yZXR1cm5WYWx1ZSk7CisKKyAgICBpZiAoIWVy
cm9yLmxlbmd0aCgpKQorICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInJl
dHVyblZhbHVlIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29u
c3RhbnRWYWx1ZShvdXRfcmV0dXJuVmFsdWUpKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocmVzdWx0KSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92
ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0t
dmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7
CisKK2NsYXNzIEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBF
dmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0
ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgICAgIC8vIE5h
bWVkIGFmdGVyIHBhcmFtZXRlciAncGFyYW1ldGVyJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQv
ZXZlbnQgZXZlbnRXaXRoRW51bVBhcmFtZXRlci4KKyAgICAgICAgZW51bSBjbGFzcyBQYXJhbWV0
ZXIgeworICAgICAgICAgICAgU2hhcmVkID0gMCwKKyAgICAgICAgICAgIEJsYWNrID0gNCwKKyAg
ICAgICAgICAgIFdoaXRlID0gNSwKKyAgICAgICAgfTsgLy8gZW51bSBjbGFzcyBQYXJhbWV0ZXIK
KyAgICB2b2lkIGV2ZW50V2l0aEVudW1QYXJhbWV0ZXIoUGFyYW1ldGVyIHBhcmFtZXRlcik7Citw
cml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXI6
OmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIoUGFyYW1ldGVyIHBhcmFtZXRlcikKK3sKKyAgICBSZWY8
SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJ
SUxpdGVyYWwoIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiKSk7CisgICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInBhcmFtZXRlciIp
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
cGFyYW1ldGVyKSk7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBh
cmFtcyIpLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5z
ZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3Bw
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisK
Ky8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIFR5cGVEb21haW4geworZW51bSBj
bGFzcyBUeXBlRG9tYWluRW51bTsKK30gLy8gVHlwZURvbWFpbgorLy8gRW5kIG9mIGZvcndhcmQg
ZGVjbGFyYXRpb25zLgorCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcg
Z2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBT
dHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdl
dEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBUeXBlRG9tYWluIHsKKy8qICAq
LworZW51bSBjbGFzcyBUeXBlRG9tYWluRW51bSB7CisgICAgU2hhcmVkID0gMCwKKyAgICBSZWQg
PSAxLAorICAgIEdyZWVuID0gMiwKKyAgICBCbHVlID0gMywKK307IC8vIGVudW0gY2xhc3MgVHlw
ZURvbWFpbkVudW0KK30gLy8gVHlwZURvbWFpbgorCisKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJz
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KK3N0ZDo6b3B0aW9uYWw8
UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYp
OworCisvLyBFbnVtcyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgordGVtcGxhdGU8Pgorc3Rk
OjpvcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51
bT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21h
aW46OlR5cGVEb21haW5FbnVtPihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVz
dEhlbHBlcnMKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9j
b2wgeworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitzdGF0aWMgY29uc3QgY2hhciogY29u
c3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAic2hhcmVkIiwKKyAgICAicmVkIiwK
KyAgICAiZ3JlZW4iLAorICAgICJibHVlIiwKKyAgICAiYmxhY2siLAorICAgICJ3aGl0ZSIsCisg
ICAgImN5YW4iLAorICAgICJtYWdlbnRhIiwKKyAgICAieWVsbG93IiwKK307CisKK1N0cmluZyBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50
X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4K
K3RlbXBsYXRlPD4KK3N0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFp
bjo6VHlwZURvbWFpbkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4oY29uc3QgU3RyaW5nJiBwcm90b2Nv
bFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7
CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURv
bWFpbkVudW06OlNoYXJlZCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpU
eXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6UmVkLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpHcmVlbiwKKyAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6
Qmx1ZSwKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAg
ICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1
ZXNbaV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9t
YWluOjpUeXBlRG9tYWluRW51bSljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworCisKK30gLy8g
bmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29s
IFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworCisKKworY2xhc3MgT2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERp
c3BhdGNoZXIgeworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+IGhh
bmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29tbWFu
ZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRlOworcHJpdmF0ZToK
KyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+
PiBtX2RlbGVnYXRlOworfTsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9s
bGVyOworICAgIGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiBfY29t
bWFuZERvbWFpbkhhbmRsZXI7CisgICAgVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVu
dERpc3BhdGNoZXIgKl9ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Kiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250
cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFs
bG9jCit7CisgICAgW19jb21tYW5kRG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBbX2V2ZW50
RG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30K
KworLSAodm9pZClzZXRDb21tYW5kRG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sQ29tbWFu
ZERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfY29t
bWFuZERvbWFpbkhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfY29tbWFuZERvbWFp
bkhhbmRsZXIgcmVsZWFzZV07CisgICAgX2NvbW1hbmREb21haW5IYW5kbGVyID0gW2hhbmRsZXIg
cmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlx
dWU8T2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7
CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IHN0ZDo6bWFrZV91bmlxdWU8QWx0ZXJuYXRlRGlz
cGF0Y2hhYmxlQWdlbnQ8Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+PihBU0NJSUxpdGVyYWwoIkNvbW1hbmREb21h
aW4iKSwgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBf
Y29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9
CisKKy0gKGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiljb21tYW5k
RG9tYWluSGFuZGxlcgoreworICAgIHJldHVybiBfY29tbWFuZERvbWFpbkhhbmRsZXI7Cit9CisK
Ky0gKFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICopZXZlbnRE
b21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBpZiAoIV9ldmVudERvbWFpbkV2ZW50RGlzcGF0
Y2hlcikKKyAgICAgICAgX2V2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9j
b2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9s
bGVyOl9jb250cm9sbGVyXTsKKyAgICByZXR1cm4gX2V2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVy
OworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9U
ZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkp
CitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3Bl
cnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldENvbW1hbmREb21haW5IYW5kbGVyOikg
aWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+IGNvbW1hbmREb21haW5I
YW5kbGVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xFdmVu
dERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZXZlbnREb21haW5FdmVudERpc3BhdGNoZXI7
CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKKwordm9pZCBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJ
ZCkKK3sKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNz
Q2FsbGJhY2sgPSBeKFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1
cm5WYWx1ZVJldHVyblZhbHVlIHJldHVyblZhbHVlKSB7CisgICAgICAgIFJlZjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicmV0dXJuVmFsdWUiKSwgdG9Q
cm90b2NvbFN0cmluZyhyZXR1cm5WYWx1ZSkpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCkpOworICAgIH07
CisKKyAgICBbbV9kZWxlZ2F0ZSBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNh
bGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9
CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOworCisKKworCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRv
bWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6
KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKK3sKKyAgICBzZWxm
ID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAg
IHJldHVybiBzZWxmOworfQorCistICh2b2lkKWV2ZW50V2l0aEVudW1QYXJhbWV0ZXJXaXRoUGFy
YW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJh
bWV0ZXIpcGFyYW1ldGVyCit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9j
b250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4g
anNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJFdmVudERv
bWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIikpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwYXJhbWV0ZXIiKSwgdG9Qcm90b2NvbFN0cmlu
ZyhwYXJhbWV0ZXIpKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgi
cGFyYW1zIiksIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7CisgICAgcm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2Vy
LCBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSkgeworICAgIFRlc3RQcm90b2NvbFR5cGVEb21h
aW5FbnVtU2hhcmVkLAorICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtUmVkLAorICAgIFRl
c3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW4sCisgICAgVGVzdFByb3RvY29sVHlwZURvbWFp
bkVudW1CbHVlLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29s
Q29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWUpIHsKKyAg
ICBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1
cm5WYWx1ZVNoYXJlZCwKKyAgICBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhF
bnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZUN5YW4sCisgICAgVGVzdFByb3RvY29sQ29tbWFuZERv
bWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWVNYWdlbnRhLAorICAgIFRl
c3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZh
bHVlWWVsbG93LAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29s
RXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyKSB7CisgICAgVGVzdFBy
b3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyU2hhcmVkLAor
ICAgIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRl
ckJsYWNrLAorICAgIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51bVBhcmFtZXRl
clBhcmFtZXRlcldoaXRlLAorfTsKKworCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xDb21tYW5k
RG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAcmVxdWlyZWQKKy0gKHZvaWQpY29tbWFu
ZFdpdGhFbnVtUmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAq
ZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKFRlc3RQcm90b2Nv
bENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlIHJldHVy
blZhbHVlKSlzdWNjZXNzQ2FsbGJhY2s7CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFp
bkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKWV2ZW50V2l0aEVudW1QYXJhbWV0
ZXJXaXRoUGFyYW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJh
bWV0ZXJQYXJhbWV0ZXIpcGFyYW1ldGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK0BpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciopY29udHJvbGxlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29u
dmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IE9iakNFbnVtVHlwZT4KK09iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSk7CisKKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90
b2NvbFR5cGVEb21haW5FbnVtIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNh
c2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1TaGFyZWQ6CisgICAgICAgIHJldHVybiBBU0NJ
SUxpdGVyYWwoInNoYXJlZCIpOworICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1S
ZWQ6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInJlZCIpOworICAgIGNhc2UgVGVzdFBy
b3RvY29sVHlwZURvbWFpbkVudW1HcmVlbjoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
Z3JlZW4iKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1ZToKKyAgICAg
ICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYmx1ZSIpOworICAgIH0KK30KKwordGVtcGxhdGU8Pgor
aW5saW5lIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtIGZyb21Qcm90b2NvbFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAic2hhcmVkIikKKyAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkOworICAgIGlmICh2YWx1ZSA9
PSAicmVkIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtUmVkOwor
ICAgIGlmICh2YWx1ZSA9PSAiZ3JlZW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlw
ZURvbWFpbkVudW1HcmVlbjsKKyAgICBpZiAodmFsdWUgPT0gImJsdWUiKQorICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVlOworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZDsKK30KKwor
CitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sQ29tbWFuZERvbWFp
bkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWUgdmFsdWUpCit7CisgICAgc3dp
dGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdp
dGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZVNoYXJlZDoKKyAgICAgICAgcmV0dXJuIEFTQ0lJ
TGl0ZXJhbCgic2hhcmVkIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29t
bWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZUN5YW46CisgICAgICAgIHJldHVybiBB
U0NJSUxpdGVyYWwoImN5YW4iKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbENvbW1hbmREb21haW5D
b21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlTWFnZW50YToKKyAgICAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgibWFnZW50YSIpOworICAgIGNhc2UgVGVzdFByb3RvY29sQ29tbWFu
ZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWVZZWxsb3c6CisgICAg
ICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInllbGxvdyIpOworICAgIH0KK30KKwordGVtcGxhdGU8
PgoraW5saW5lIFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5W
YWx1ZVJldHVyblZhbHVlIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQor
eworICAgIGlmICh2YWx1ZSA9PSAic2hhcmVkIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlU2hhcmVk
OworICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xD
b21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZUN5YW47Cisg
ICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbENv
bW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlTWFnZW50YTsK
KyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xD
b21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZVllbGxvdzsK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVGVzdFByb3RvY29sQ29tbWFu
ZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWVTaGFyZWQ7Cit9CisK
KworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbEV2ZW50RG9tYWlu
RXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFs
dWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51bVBhcmFt
ZXRlclBhcmFtZXRlclNoYXJlZDoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgic2hhcmVk
Iik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0
ZXJQYXJhbWV0ZXJCbGFjazoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYmxhY2siKTsK
KyAgICBjYXNlIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51bVBhcmFtZXRlclBh
cmFtZXRlcldoaXRlOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ3aGl0ZSIpOworICAg
IH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRX
aXRoRW51bVBhcmFtZXRlclBhcmFtZXRlciBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gInNoYXJlZCIpCisgICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXJTaGFy
ZWQ7CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXJCbGFjazsKKyAgICBp
ZiAodmFsdWUgPT0gIndoaXRlIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbEV2ZW50RG9t
YWluRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlcldoaXRlOworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVu
dW1QYXJhbWV0ZXJQYXJhbWV0ZXJTaGFyZWQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFR5cGVEb21h
aW5Eb21haW4pCisKKysgKHZvaWQpX3BhcnNlVHlwZURvbWFpbkVudW06KE5TTnVtYmVyICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCitAaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucyAoQ29tbWFuZERvbWFpbkRvbWFpbikKKworQGVuZAorQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKEV2ZW50RG9tYWluRG9tYWluKQor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFR5
cGVEb21haW5Eb21haW4pCisKKysgKHZvaWQpX3BhcnNlVHlwZURvbWFpbkVudW06KE5TTnVtYmVy
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFs
dWUgPSBAKEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFR5cGVEb21h
aW5FbnVtPihwYXlsb2FkKSk7Cit9CisKK0BlbmQKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMgKENvbW1hbmREb21haW5Eb21haW4pCisKK0BlbmQKK0BpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKEV2ZW50RG9tYWluRG9tYWluKQor
CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0K
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorI2ltcG9ydCA8
d3RmL0Fzc2VydGlvbnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKwor
CisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
MzFkNjg0Y2UzMjBiZjc1NGU2YTZhYzczNzdlMTdhYzE3ZDVjY2Y0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAt
MCwwICsxLDExODMgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25h
bC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworLy8gRGF0YWJhc2UuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGF0YWJhc2VEaXNw
YXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZChJ
bnNwZWN0b3JCYWNrZW5kLCAiRGF0YWJhc2UiKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJF
dmVudCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsIFsiY29sdW1uTmFt
ZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgInNxbEVycm9y
IiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOworSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnMiLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1
ZXMiLCAicGF5bG9hZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xv
cnMiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRh
dGFiYXNlIik7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisj
IyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVy
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5k
RGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2Jh
Y2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3Bh
dGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBt
X2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMj
IyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwor
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3Bw
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwt
cGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgiCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRp
b25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRl
bmRSb3V0ZXI7CisKK2NsYXNzIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoK
KyAgICBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRS
b3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9pZCBk
aWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25zdCBub3RlcywgY29u
c3QgZG91YmxlKiBjb25zdCB0aW1lc3RhbXAsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gdmFsdWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBjb25zdCBz
Y3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBjb25zdCBwcmludENvbG9yKTsKKyAg
ICB2b2lkIGRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMs
IGRvdWJsZSB0aW1lc3RhbXAsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFs
dWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzJiBzY3JlZW5Db2xvciwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNv
bG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKTsKK3ByaXZhdGU6CisgICAgRnJvbnRlbmRS
b3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCit2b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRF
eGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25zdCBub3RlcywgY29uc3Qg
ZG91YmxlKiBjb25zdCB0aW1lc3RhbXAsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4gdmFsdWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBjb25zdCBzY3Jl
ZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+
IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBjb25zdCBwcmludENvbG9yKQoreworICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiks
IEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIpKTsK
KyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGlmIChjb2x1bW5OYW1lcykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5z
ZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGNvbHVtbk5hbWVzKTsKKyAgICBp
ZiAobm90ZXMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
bm90ZXMiKSwgKm5vdGVzKTsKKyAgICBpZiAodGltZXN0YW1wKQorICAgICAgICBwYXJhbXNPYmpl
Y3QtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCAqdGltZXN0YW1wKTsKKyAg
ICBpZiAodmFsdWVzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVy
YWwoInZhbHVlcyIpLCB2YWx1ZXMpOworICAgIGlmIChwYXlsb2FkKQorICAgICAgICBwYXJhbXNP
YmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCAqcGF5bG9hZCk7CisgICAg
aWYgKHNxbEVycm9yKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVy
YWwoInNxbEVycm9yIiksIHNxbEVycm9yKTsKKyAgICBpZiAoc2NyZWVuQ29sb3IpCisgICAgICAg
IHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgKnNj
cmVlbkNvbG9yKTsKKyAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBwYXJhbXNPYmpl
Y3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIGFsdGVybmF0ZUNv
bG9ycyk7CisgICAgaWYgKHByaW50Q29sb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCAqcHJpbnRDb2xvcik7CisgICAganNvbk1l
c3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBXVEZNb3ZlKHBhcmFtc09i
amVjdCkpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKK30KKwordm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlk
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRp
bWVzdGFtcCwgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25z
dCBTdHJpbmcmIHByaW50Q29sb3IpCit7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJEYXRhYmFzZS5kaWRF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKSk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwYXJhbXNPYmpl
Y3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOwor
ICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbm90ZXMp
OworICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiks
IHRpbWVzdGFtcCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2
YWx1ZXMiKSwgdmFsdWVzKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJh
bCgicGF5bG9hZCIpLCBwYXlsb2FkKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdChBU0NJ
SUxpdGVyYWwoInNxbEVycm9yIiksIHNxbEVycm9yKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIHNjcmVlbkNvbG9yKTsKKyAgICBwYXJh
bXNPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIGFsdGVy
bmF0ZUNvbG9ycyk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJw
cmludENvbG9yIiksIHByaW50Q29sb3IpOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJwYXJhbXMiKSwgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKKworICAgIG1fZnJv
bnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFy
YW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlw
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25z
LgorbmFtZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIEVycm9yOworfSAvLyBEYXRhYmFzZQorLy8g
RW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNl
IERhdGFiYXNlIHsKKy8qIFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8K
K3R5cGVkZWYgU3RyaW5nIERhdGFiYXNlSWQ7Cit0eXBlZGVmIFN0cmluZyBQcmltYXJ5Q29sb3Jz
OwordHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gQ29sb3JMaXN0OworfSAvLyBEYXRhYmFzZQorLy8g
RW5kIG9mIHR5cGVkZWZzLgorCituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogRGF0YWJhc2UgZXJy
b3IuICovCitjbGFzcyBFcnJvciA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJh
c2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAg
ICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAg
ICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKKyAgICB9OworCisgICAg
dGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6Cisg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3Iq
L0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1v
dmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOworICAgIHB1YmxpYzoKKworICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1l
c3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXNzYWdlIiksIHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVy
dHlfY29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcihB
U0NJSUxpdGVyYWwoImNvZGUiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxDb2RlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZihFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKwor
ICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFz
ZU5vbk51bGwoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0
PFJlZjxFcnJvcj4qPigmcmVzdWx0KSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBF
cnJvcjo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQorICAgICAqICAgICAu
c2V0Q29kZSguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGlj
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVp
bGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorfTsK
KworfSAvLyBEYXRhYmFzZQorCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
KworCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0
Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKwor
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZGF0YWJhc2VFdmVudERpc3BhdGNoZXI7Cit9
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVy
KTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpZGVhbGxvYworeworICAgIFtfZGF0YWJhc2VFdmVudERpc3BhdGNoZXIgcmVsZWFz
ZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChUZXN0UHJvdG9jb2xEYXRhYmFzZURv
bWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRhdGFiYXNlRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYg
KCFfZGF0YWJhc2VFdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9kYXRhYmFzZUV2ZW50RGlzcGF0
Y2hlciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2Nd
IGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9kYXRhYmFzZUV2
ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0
aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZGF0YWJhc2VFdmVu
dERpc3BhdGNoZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlv
bmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlz
cGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0
aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VEb21h
aW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
IF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Cit7CisgICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
QVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzV2l0
aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29sdW1uTmFtZXMgbm90ZXM6
KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlICopdGltZXN0YW1wIHZhbHVlczoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05P
YmplY3QgKiopcGF5bG9hZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilz
cWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJpbmcgKiopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29s
b3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6
KE5TU3RyaW5nICoqKXByaW50Q29sb3IKK3sKKyAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91
dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CisKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMi
KTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMs
IEAibm90ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVU
RVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc2NyZWVuQ29sb3IsIEAi
c2NyZWVuQ29sb3IiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJB
TUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwcmludENvbG9yLCBAInByaW50Q29s
b3IiKTsKKworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFy
YW1ldGVycyIpKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGlmIChjb2x1bW5OYW1lcykKKyAgICAgICAgcGFy
YW1zT2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGluc3BlY3Rv
clN0cmluZ0FycmF5KCgqY29sdW1uTmFtZXMpKSk7CisgICAgaWYgKG5vdGVzKQorICAgICAgICBw
YXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksICgqbm90ZXMpKTsK
KyAgICBpZiAodGltZXN0YW1wKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZShBU0NJ
SUxpdGVyYWwoInRpbWVzdGFtcCIpLCAoKnRpbWVzdGFtcCkpOworICAgIGlmICh2YWx1ZXMpCisg
ICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIFso
KnZhbHVlcykgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICBpZiAocGF5bG9hZCkKKyAgICAgICAg
cGFyYW1zT2JqZWN0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgWygqcGF5bG9h
ZCkgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgIHBhcmFt
c09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgWygqc3FsRXJyb3Ip
IHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgaWYgKHNjcmVlbkNvbG9yKQorICAgICAgICBwYXJh
bXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksICgqc2NyZWVu
Q29sb3IpKTsKKyAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIGluc3BlY3RvclN0cmlu
Z0FycmF5KCgqYWx0ZXJuYXRlQ29sb3JzKSkpOworICAgIGlmIChwcmludENvbG9yKQorICAgICAg
ICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgKCpw
cmludENvbG9yKSk7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBh
cmFtcyIpLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOworICAgIHJvdXRlci5zZW5kRXZlbnQoanNv
bk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworLSAodm9pZClkaWRFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNv
bHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVz
dGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5TU3RyaW5nICopc2NyZWVuQ29sb3IgYWx0
ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJp
bnRDb2xvcjooTlNTdHJpbmcgKilwcmludENvbG9yCit7CisgICAgY29uc3QgRnJvbnRlbmRSb3V0
ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFt
ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3Rlcywg
QCJub3RlcyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZh
bHVlcywgQCJ2YWx1ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFN
RVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNjcmVlbkNvbG9yLCBAInNjcmVlbkNvbG9yIik7Cisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3Jz
LCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIpOworCisgICAgUmVmPEluc3BlY3Rv
ck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpz
b25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFs
KCJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKSk7CisgICAgUmVmPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwg
aW5zcGVjdG9yU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKKyAgICBwYXJhbXNPYmplY3QtPnNl
dFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG5vdGVzKTsKKyAgICBwYXJhbXNPYmplY3Qt
PnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOworICAgIHBh
cmFtc09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIFt2YWx1ZXMgdG9J
bnNwZWN0b3JPYmplY3RdKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJh
bCgicGF5bG9hZCIpLCBbcGF5bG9hZCB0b0luc3BlY3Rvck9iamVjdF0pOworICAgIHBhcmFtc09i
amVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgW3NxbEVycm9yIHRvSW5z
cGVjdG9yT2JqZWN0XSk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJzY3JlZW5Db2xvciIpLCBzY3JlZW5Db2xvcik7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJh
eShBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheShh
bHRlcm5hdGVDb2xvcnMpKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoInByaW50Q29sb3IiKSwgcHJpbnRDb2xvcik7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVj
dChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOworICAgIHJv
dXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworQGVuZAor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4K
KworCitAY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcjsKKworCisKKworX19hdHRyaWJ1
dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
anNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICop
bWVzc2FnZSBjb2RlOihpbnQpY29kZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOworQGVuZAorCisKKworX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNl
RG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKKy0gKHZvaWQpZGlkRXhlY3V0ZU9wdGlv
bmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWNv
bHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSAqKXRp
bWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKil2YWx1ZXMgcGF5bG9hZDoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXBheWxvYWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5TU3RyaW5nICoqKXNjcmVlbkNv
bG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWFsdGVybmF0ZUNv
bG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKilwcmludENvbG9yOworLSAodm9pZClkaWRFeGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91
YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXls
b2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIHNxbEVycm9yOihUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5TU3RyaW5nICopc2NyZWVu
Q29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVD
b2xvcnMgcHJpbnRDb2xvcjooTlNTdHJpbmcgKilwcmludENvbG9yOworQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbElu
dGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1v
cHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JWYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50
RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6
KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwor
QGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNp
b25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpD
RW51bVR5cGU+CitPYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFz
ZURvbWFpbikKKworKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU1N0cmluZyAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczoo
TlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9w
YXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitA
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFp
bikKKworKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICop
cGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU1N0cmluZyAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0g
KE5TU3RyaW5nICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAorewor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0
cmluZz4qLyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Cisg
ICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0
aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRp
b25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9h
ZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJd
LCBAIm1lc3NhZ2UiKTsKKyAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOwor
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29k
ZSJdLCBAImNvZGUiKTsKKyAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2Vy
VmFsdWVdOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhK
U09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Cit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0lu
c3BlY3Rvck9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVy
biBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAq
KW1lc3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRd
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBt
ZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0
U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1l
c3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30K
KworLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNv
ZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29kZQoreworICAgIHJldHVybiBbc3Vw
ZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWF2
YWlsYWJpbGl0eS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tYXZhaWxhYmlsaXR5
Lmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTBkNzE5NWQ2YWQzNmEwZDZiZjdhN2FiYzc0MTc2YzBm
Mjg2MGZjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWF2YWlsYWJp
bGl0eS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNw
ZWNpZmljYXRpb246IGF2YWlsYWJpbGl0eSBpcyBhbiB1bnN1cHBvcnRlZCBzdHJpbmcuIFdhczog
IndlYmIiLCBBbGxvd2VkIHZhbHVlczogd2ViCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1
cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9m
YWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uM2Y3NTZkZTMyNTA1MGMzM2E0OTJjZDUwZDllYWRmNDIzMDM1YjYxMAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJh
bWV0ZXItbmFtZXMuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRv
bWFpbiBzcGVjaWZpY2F0aW9uOiBjYWxsIHBhcmFtZXRlciBsaXN0IGZvciBjb21tYW5kIHByb2Nl
c3NQb2ludHMgaGFzIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVy
cm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5h
bWVzLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWExNDhmZjY3Yzk2MDk0ODhhODBlNmZhMjVkM2Jm
YTc3OGY1ZGEwYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNv
bW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VS
Uk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHJldHVybiBwYXJhbWV0ZXIgbGlz
dCBmb3IgY29tbWFuZCBwcm9jZXNzUG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFt
ZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1u
YW1lcy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3MWJiZDIxYzJjZjBjM2IwMzgwMWQ5NjM3YTRl
NmQwZmMyNWFjNDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1l
dmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFs
Zm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBwYXJhbWV0ZXIgbGlzdCBmb3IgZXZlbnQgcHJv
Y2Vzc2VkUG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvcgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40NDdjZGY4ZTI4ZTg1NjYxMGEyNmY4MTU0OTQzZjM2Y2Y4YjdkMWY0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1l
cnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogRHVwbGljYXRlIHR5cGUgZGVjbGFyYXRpb246IFJ1
bnRpbWUuUmVtb3RlT2JqZWN0SWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRl
LXR5cGUtbWVtYmVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10
eXBlLW1lbWJlci1uYW1lcy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1Mzc2YTc3YTQ1NWZkMTVm
NjdkOGJjYjkzNWE2YmE0MzhjMGE1NGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9u
LWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VS
Uk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHR5cGUgZGVjbGFyYXRpb24gZm9y
IFBvaW50IGhhcyBkdXBsaWNhdGUgbWVtYmVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZW51bS13
aXRoLW5vLXZhbHVlcy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2NTVjMmI5MDdlMDJlM2U4NGNi
M2Y2NmZhMWY1OGUxM2Q5YjdiNTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWVu
dW0td2l0aC1uby12YWx1ZXMuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogVHlwZSBy
ZWZlcmVuY2Ugd2l0aCBlbnVtIHZhbHVlcyBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGVudW0gdmFs
dWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJh
bWV0ZXItZmxhZy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9u
YWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45N2IyYWYwZTQ3ZTkzZjgw
NDk3OTQ0NDcyNTdkZjMyNzIzZjA2ODI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1v
bi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgpAQCAtMCww
ICsxIEBACitFUlJPUjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSBwYXJhbWV0ZXIgbXVzdCBi
ZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5
cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLW51bWJl
ci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2ZGYz
NzUwYzFhNzc5Nzg5M2NiZmI3ZTI4NzZkOTJjY2VjYzJmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9y
CkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUaGUgJ29wdGlvbmFsJyBmbGFnIGZvciBhIHR5cGUgbWVt
YmVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9u
LXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45N2IyYWYwZTQ3ZTkzZjgwNDk3OTQ0NDcyNTdkZjMyNzIzZjA2ODI0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1l
dGVyLWZsYWcuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogVGhlICdvcHRpb25hbCcg
ZmxhZyBmb3IgYSBwYXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24t
ZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5q
c29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2ZGYzNzUwYzFhNzc5Nzg5M2NiZmI3ZTI4NzZkOTJjY2Vj
YzJmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRp
b25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUaGUgJ29w
dGlvbmFsJyBmbGFnIGZvciBhIHR5cGUgbWVtYmVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1y
ZWZlcmVuY2UuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2lu
Zy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyZjU3NTNhNDM5NjE0NGVi
NTY2YzVjNTk2OGQwNDlhZWM2MTgyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9u
LXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgpAQCAtMCww
ICsxIEBACitFUlJPUjogVHlwZSByZWZlcmVuY2UgY2Fubm90IGhhdmUgYm90aCAndHlwZScgYW5k
ICckcmVmJyBrZXlzLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1h
cy1wcmltaXRpdmUtdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXJlZmVyZW5j
ZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3NmJjMWM3NzczYWEw
ZGE5ODg0OWM5M2MzNGMzOTJmMTYyNzYzOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24tZXJyb3IKQEAgLTAsMCAr
MSBAQAorRVJST1I6IFR5cGUgcmVmZXJlbmNlICdEYXRhYmFzZUlkJyBpcyBub3QgYSBwcmltaXRp
dmUgdHlwZS4gQWxsb3dlZCB2YWx1ZXM6IGludGVnZXIsIG51bWJlciwgc3RyaW5nLCBib29sZWFu
LCBlbnVtLCBvYmplY3QsIGFycmF5LCBhbnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlw
ZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0
aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlNDYyMjUwYzBhZjgwYTE3
OWUwNmFhZjQ1ZDIxZWI1NDZkYjg4MTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9u
LXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9S
OiBUeXBlcyBtdXN0IGJlZ2luIHdpdGggYW4gdXBwZXJjYXNlIGNoYXJhY3Rlci4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0
aW9uLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4t
dHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJkMzhlNjQ2NzVkYTVhZTVj
MjYzZDU0NmU4NTM0YjQ5ZjNiNWU5YzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9u
LXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCkBA
IC0wLDAgKzEgQEAKK0VSUk9SOiBUeXBlIHJlZmVyZW5jZSAnZHJhZ29uJyBpcyBub3QgYSBwcmlt
aXRpdmUgdHlwZS4gQWxsb3dlZCB2YWx1ZXM6IGludGVnZXIsIG51bWJlciwgc3RyaW5nLCBib29s
ZWFuLCBlbnVtLCBvYmplY3QsIGFycmF5LCBhbnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24t
dW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZmFmNjY3MmNiZWYwOTYzMGZkOWJlOGZmYWRhY2UxMmM1NjExY2NhOAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10
eXBlLW1lbWJlci5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBMb29rdXAgZmFpbGVk
IGZvciB0eXBlIHJlZmVyZW5jZTogQ29sb3IgKHJlZmVyZW5jZWQgZnJvbSBkb21haW46IEZhbnRh
c3kpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFy
ZHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFy
ZHMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzk0NjY2ZDJjZDlkMGE3OGIzNzUyN2Q2YzY4NmM0
ZmJjZjkxMDE5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0
aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEyMzEgQEAKKyMjIyBCZWdp
biBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBOZXR3b3JrMS4K
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMS5sb2FkUmVzb3VyY2Ui
LCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yazEiKTsK
KworLy8gTmV0d29yazMuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyTmV0d29yazNEaXNwYXRj
aGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZChJbnNw
ZWN0b3JCYWNrZW5kLCAiTmV0d29yazMiKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVu
dCgiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2
YXRlRG9tYWluKCJOZXR3b3JrMyIpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMt
d2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6Cisg
ICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYg
ZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsg
fQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJh
Y2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisjaWYgUExBVEZP
Uk0oV0VCX0NPTU1BTkRTKQorY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB+QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBjYWxsSWQpID0gMDsKK307CisjZW5kaWYgLy8gUExB
VEZPUk0oV0VCX0NPTU1BTkRTKQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxl
OiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpZiBQTEFURk9STShXRUJf
Q09NTUFORFMpCitjbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOworI2Vu
ZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKK2Ns
YXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIHZvaWQgbG9hZFJlc291cmNlKEVycm9yU3RyaW5nJikgPSAwOworcHJvdGVjdGVkOgorICAg
IHZpcnR1YWwgfk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworI2VuZGlm
IC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKKworI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykK
K2NsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBv
dmVycmlkZTsKK3ByaXZhdGU6CisgICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5h
dGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0
ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hl
cjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBt
X2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYKK3ByaXZhdGU6CisgICAg
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9D
T01NQU5EUykKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21h
aW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKK05ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjp+TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7
IH0KKyNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCisKKyNpZiBQTEFURk9STShXRUJf
Q09NTUFORFMpCitSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwg
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIs
IGFnZW50KSk7Cit9CisKK05ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50YWxCYWNr
ZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7
CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFT
Q0lJTGl0ZXJhbCgiTmV0d29yazEiKSwgdGhpcyk7Cit9CisKK3ZvaWQgTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVmPE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJw
YXJhbXMiKSwgcGFyYW1ldGVycyk7CisKKyAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2Ui
KQorICAgICAgICBsb2FkUmVzb3VyY2UocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsK
KyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcJycsICJO
ZXR3b3JrMSIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOworfQorCit2b2lkIE5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlKHJlcXVlc3RJZCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgbV9hZ2VudC0+bG9hZFJlc291cmNlKGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3Ro
KCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IFdURk1vdmUocmVzdWx0KSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RG
TW92ZShlcnJvcikpOworfQorI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVh
dHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJv
dXRlcjsKKworI2lmIFBMQVRGT1JNKFdFQl9FVkVOVFMpCitjbGFzcyBOZXR3b3JrM0Zyb250ZW5k
RGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgTmV0d29yazNGcm9udGVuZERpc3BhdGNoZXIoRnJv
bnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRS
b3V0ZXIpIHsgfQorICAgIHZvaWQgcmVzb3VyY2VMb2FkZWQoKTsKK3ByaXZhdGU6CisgICAgRnJv
bnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Cit9OworI2VuZGlmIC8vIFBMQVRGT1JNKFdF
Ql9FVkVOVFMpCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1k
b21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kUm91dGVy
LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworI2lmIFBMQVRGT1JNKFdFQl9FVkVOVFMpCit2b2lkIE5ldHdvcmszRnJvbnRlbmREaXNw
YXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCit7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNv
bk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJOZXR3b3JrMy5y
ZXNvdXJjZUxvYWRlZCIpKTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25N
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisjZW5kaWYgLy8gUExBVEZPUk0oV0VCX0VWRU5U
UykKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdp
dGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQ
cm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisvLyBGb3J3YXJkIGRl
Y2xhcmF0aW9ucy4KKyNpZiBQTEFURk9STShXRUJfVFlQRVMpCituYW1lc3BhY2UgTmV0d29yazIg
eworY2xhc3MgTmV0d29ya0Vycm9yOworfSAvLyBOZXR3b3JrMgorI2VuZGlmIC8vIFBMQVRGT1JN
KFdFQl9UWVBFUykKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisKKworI2lm
IFBMQVRGT1JNKFdFQl9UWVBFUykKK25hbWVzcGFjZSBOZXR3b3JrMiB7CitjbGFzcyBOZXR3b3Jr
RXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoK
KyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdlU2V0
ID0gMSA8PCAwLAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNT
ZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBT
VEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKk5ldHdvcmtFcnJvciovSW5zcGVj
dG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmpl
Y3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQor
ICAgICAgICBmcmllbmQgY2xhc3MgTmV0d29ya0Vycm9yOworICAgIHB1YmxpYzoKKworICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1l
c3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXNzYWdlIiksIHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVy
dHlfY29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcihB
U0NJSUxpdGVyYWwoImNvZGUiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxDb2RlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPE5ldHdvcmtFcnJvcj4gcmVs
ZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFs
bEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChzaXplb2YoTmV0d29ya0Vycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fu
bm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBt
X3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmPE5ldHdvcmtFcnJvcj4qPigmcmVzdWx0KSk7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICog
UmVmPE5ldHdvcmtFcnJvcj4gcmVzdWx0ID0gTmV0d29ya0Vycm9yOjpjcmVhdGUoKQorICAgICAq
ICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRDb2RlKC4uLikKKyAgICAgKiAg
ICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4g
Y3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCit9IC8vIE5ldHdvcmsyCisjZW5k
aWYgLy8gUExBVEZPUk0oV0VCX1RZUEVTKQorCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVy
ZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgor
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisK
K30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFp
bkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKyNpZiBQTEFURk9STShXRUJf
Q09NTUFORFMpCitjbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBm
aW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1Ymxp
YzoKKyAgICBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJv
dG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRs
ZXI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKSBvdmVy
cmlkZTsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9t
YWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01N
QU5EUykKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5I
YW5kbGVyPiBfbmV0d29yazFIYW5kbGVyOworICAgIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWlu
RXZlbnREaXNwYXRjaGVyICpfbmV0d29yazNFdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxm
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVh
bGxvYworeworICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOworICAgIFtfbmV0d29yazNF
dmVudERpc3BhdGNoZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2
b2lkKXNldE5ldHdvcmsxSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5k
bGVyPiloYW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmsxSGFuZGxlcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgW19uZXR3b3JrMUhhbmRsZXIgcmVsZWFzZV07CisgICAgX25l
dHdvcmsxSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURp
c3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gc3RkOjptYWtl
X3VuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyLCBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPj4oQVNDSUlMaXRlcmFsKCJO
ZXR3b3JrMSIpLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwor
ICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQp
KTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiluZXR3b3Jr
MUhhbmRsZXIKK3sKKyAgICByZXR1cm4gX25ldHdvcmsxSGFuZGxlcjsKK30KKworLSAoVGVzdFBy
b3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIgKiluZXR3b3JrM0V2ZW50RGlzcGF0
Y2hlcgoreworICAgIGlmICghX25ldHdvcmszRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBfbmV0
d29yazNFdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnRE
aXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJl
dHVybiBfbmV0d29yazNFdmVudERpc3BhdGNoZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0
UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitA
aW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5
IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmsxSGFuZGxlcjopIGlkPFRlc3RQ
cm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gbmV0d29yazFIYW5kbGVyOworQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlz
cGF0Y2hlciAqbmV0d29yazNFdmVudERpc3BhdGNoZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKK3ZvaWQgT2Jq
Q0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJl
cXVlc3RJZCkKK3sKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9OworCisg
ICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworI2VuZGlmIC8vIFBMQVRG
T1JNKFdFQl9DT01NQU5EUykKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisK
KworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRj
aGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsK
K30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9s
bGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKHZvaWQpcmVzb3VyY2VMb2FkZWQKK3sKKyAgICBjb25zdCBGcm9udGVuZFJvdXRlciYg
cm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CisKKyAgICBSZWY8SW5zcGVj
dG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
anNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVy
YWwoIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIikpOworICAgIHJvdXRlci5zZW5kRXZlbnQoanNv
bk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21h
aW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBU
ZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvcjsKKworCisKKworX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmsy
TmV0d29ya0Vycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAq
KW1lc3NhZ2UgY29kZTooaW50KWNvZGU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKK0BlbmQKKworQHByb3RvY29sIFRlc3RQcm90
b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAcmVxdWlyZWQKKy0gKHZvaWQp
bG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSll
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSgpKXN1Y2Nlc3NDYWxsYmFjazsK
K0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJm
YWNlIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QK
Ky0gKHZvaWQpcmVzb3VyY2VMb2FkZWQ7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJl
LWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+
CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIg
KFByaXZhdGUpCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6
OkF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKK0BlbmQKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5
cGU+CitPYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
OworCisKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAo
TmV0d29yazFEb21haW4pCisKK0BlbmQKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChOZXR3b3JrMkRvbWFpbikKKworKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6KFRl
c3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkOworCitAZW5kCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoTmV0d29yazNEb21haW4pCisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazFEb21haW4pCisKK0BlbmQKK0BpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsyRG9tYWluKQorCisrICh2b2lk
KV9wYXJzZU5ldHdvcmtFcnJvcjooVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFs
dWUgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yIGFsbG9jXSBpbml0V2l0aFBh
eWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMgKE5ldHdvcmszRG9tYWluKQorCitAZW5kCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJh
dGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbXBvcnQg
PHd0Zi9Bc3NlcnRpb25zLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisK
K0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvcgorCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmlu
ZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOworICAgIHNlbGYubWVzc2Fn
ZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOworICAgIHNlbGYuY29kZSA9
IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07CisKKyAgICByZXR1cm4gc2VsZjsKK30K
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKWpzb25PYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSW5zcGVj
dG9yT2JqZWN0Oltqc29uT2JqZWN0IHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV0pKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQoreworICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2Ui
KTsKKworICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgc2VsZi5jb2RlID0gY29kZTsK
KworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICop
bWVzc2FnZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdl
Il07Cit9CisKKy0gKE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHJldHVybiBbc3VwZXIgc3Ry
aW5nRm9yS2V5OkAibWVzc2FnZSJdOworfQorCistICh2b2lkKXNldENvZGU6KGludCljb2RlCit7
CisgICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Cit9CisKKy0gKGlu
dCljb2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOworfQor
CitAZW5kCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOGFlZDJiNzU1NmQ1YTU0YzUyZjZiNWY2NzZiNjI5NWVhMjM3MTIyMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0CkBA
IC0wLDAgKzEsODkxIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRz
LmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZl
cmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVy
KFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3Bh
dGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQo
KTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERp
c3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxl
OiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4u
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9t
YWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisK
KyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2Ug
UHJvdG9jb2wgeworCisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgUnVudGltZSB7CisvKiBV
bmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuICovCit0eXBlZGVmIFN0cmluZyBSZW1vdGVPYmplY3RJ
ZDsKK30gLy8gUnVudGltZQorCituYW1lc3BhY2UgUnVudGltZTIgeworLyogVW5pcXVlIG9iamVj
dCBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBTdHJpbmcgUmVtb3RlT2JqZWN0SWQ7Cit9IC8vIFJ1
bnRpbWUyCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2Nv
bAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9t
YWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVu
dC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAg
ICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICgh
c2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAg
X2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90
b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRl
cmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAZW5kCisKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvclZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKworCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+
CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisK
KworCisKKworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUt
dHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPYmpDRW51bVR5cGUg
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKKworCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVy
ZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3Bh
cnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOworCitAZW5kCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAo
UnVudGltZTJEb21haW4pCisKKysgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3RyaW5n
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCisKKysg
KHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilwYXls
b2FkOworfQorCitAZW5kCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChSdW50aW1lMkRvbWFpbikKKworKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNT
dHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgICpv
dXRWYWx1ZSA9IChOU1N0cmluZyAqKXBheWxvYWQ7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1l
LXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW1wb3J0IDx3dGYv
QXNzZXJ0aW9ucy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKworCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hh
ZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhYTVhMTFkNDM3
MGI0ZGIwNzhkZjQzNzI1ZDRiNDZjM2Y2NDllMDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9z
aGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMDkz
IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKyMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sVHlwZXMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJh
Y2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdU
Rk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3Bh
dGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2
YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsK
K307CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgi
CisjZW5kaWYKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNs
dWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3Rv
Y29sIHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgUnVudGltZSB7Citj
bGFzcyBLZXlQYXRoOworfSAvLyBSdW50aW1lCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlv
bnMuCisKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRFbnVtQ29u
c3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRF
bnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51bUNvbnN0
YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIFJ1bnRpbWUgeworLyogS2V5IHBhdGguICovCitj
bGFzcyBLZXlQYXRoIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7Citw
dWJsaWM6CisgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2Vu
ZXJhdGluZyBLZXlQYXRoLgorICAgIGVudW0gY2xhc3MgVHlwZSB7CisgICAgICAgIE51bGwgPSAw
LAorICAgICAgICBTdHJpbmcgPSAxLAorICAgICAgICBBcnJheSA9IDIsCisgICAgfTsgLy8gZW51
bSBjbGFzcyBUeXBlCisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAg
ICAgVHlwZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKFR5cGVTZXQpCisg
ICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAg
ICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKwor
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVy
KFJlZjwvKktleVBhdGgqL0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6
IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEtleVBhdGg7CisgICAg
cHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShUeXBl
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
VHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInR5cGUiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8S2V5
UGF0aD4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoS2V5UGF0aCkgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCks
IGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEZNb3Zl
KCpyZWludGVycHJldF9jYXN0PFJlZjxLZXlQYXRoPio+KCZyZXN1bHQpKTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBS
ZWY8S2V5UGF0aD4gcmVzdWx0ID0gS2V5UGF0aDo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldFR5
cGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKworICAgIHZv
aWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBJbnNwZWN0
b3JPYmplY3RCYXNlOjpzZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzdHJpbmciKSwgdmFsdWUpOwor
ICAgIH0KKworICAgIHZvaWQgc2V0QXJyYXkoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PFN0cmluZz4+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6
c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhcnJheSIpLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQor
fTsKKworfSAvLyBSdW50aW1lCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgorc3RkOjpvcHRpb25hbDxQcm90b2NvbEVu
dW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVu
dW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCit0ZW1wbGF0ZTw+CitzdGQ6Om9wdGlvbmFsPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihj
b25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworfSAvLyBuYW1l
c3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRp
b25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29s
IHsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgIm51bGwiLAorICAgICJzdHJpbmciLAor
ICAgICJhcnJheSIsCit9OworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUp
IHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKy8vIEVudW1z
IGluIHRoZSAnUnVudGltZScgRG9tYWluCit0ZW1wbGF0ZTw+CitzdGQ6Om9wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihjb25z
dCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29u
c3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpLZXlQYXRoOjpUeXBlOjpOdWxsLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6OlN0cmluZywKKyAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpBcnJheSwKKyAg
ICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQorICAgICAgICBpZiAocHJv
dG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQor
ICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRo
OjpUeXBlKWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30K
KworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAvLyBuYW1lc3BhY2UgUHJv
dG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworCisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVB
Z2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxl
cgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNv
bnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAg
IFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0
aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNo
YWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5
cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbFJ1
bnRpbWVLZXlQYXRoOworCisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2Nv
bFJ1bnRpbWVLZXlQYXRoVHlwZSkgeworICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlw
ZU51bGwsCisgICAgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlU3RyaW5nLAorICAgIFRl
c3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZUFycmF5LAorfTsKKworCitfX2F0dHJpYnV0ZV9f
KCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sUnVudGlt
ZUtleVBhdGggOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNv
bk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRp
bWVLZXlQYXRoVHlwZSl0eXBlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IGFzc2lnbikgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlIHR5cGU7CisvKiBvcHRpb25h
bCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKKy8qIG9w
dGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKmFycmF5OworQGVuZAorCisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIK
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKKworCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09i
akNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKwor
aW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRo
VHlwZSB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2Nv
bFJ1bnRpbWVLZXlQYXRoVHlwZU51bGw6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIm51
bGwiKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZVN0cmluZzoKKyAg
ICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgic3RyaW5nIik7CisgICAgY2FzZSBUZXN0UHJvdG9j
b2xSdW50aW1lS2V5UGF0aFR5cGVBcnJheToKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
YXJyYXkiKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBUZXN0UHJvdG9jb2xSdW50
aW1lS2V5UGF0aFR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7
CisgICAgaWYgKHZhbHVlID09ICJudWxsIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1
bnRpbWVLZXlQYXRoVHlwZU51bGw7CisgICAgaWYgKHZhbHVlID09ICJzdHJpbmciKQorICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlU3RyaW5nOworICAgIGlmICh2
YWx1ZSA9PSAiYXJyYXkiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUtleVBh
dGhUeXBlQXJyYXk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZU51bGw7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUtleVBhdGg6KFRl
c3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlS2V5UGF0aDooVGVzdFByb3RvY29s
UnVudGltZUtleVBhdGggKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xh
c3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoIGFsbG9j
XSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dl
ZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgor
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorI2ltcG9ydCA8d3RmL0Fz
c2VydGlvbnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCitAaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGgKKworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9h
ZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Ai
dHlwZSJdLCBAInR5cGUiKTsKKyAgICBzZWxmLnR5cGUgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVz
dFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPihwYXlsb2FkW0AidHlwZSJdKTsKKworICAgIHNl
bGYuc3RyaW5nID0gcGF5bG9hZFtAInN0cmluZyJdOworCisgICAgc2VsZi5hcnJheSA9IG9iamNB
cnJheUZyb21QYXlsb2FkPE5TU3RyaW5nPihwYXlsb2FkW0AiYXJyYXkiXSk7CisKKyAgICByZXR1
cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKWpzb25PYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGlu
aXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltqc29uT2JqZWN0IHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQo
KV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0
eXBlCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBu
aWw7CisKKyAgICBzZWxmLnR5cGUgPSB0eXBlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0g
KHZvaWQpc2V0VHlwZTooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKXR5cGUKK3sKKyAg
ICBbc3VwZXIgc2V0U3RyaW5nOnRvUHJvdG9jb2xTdHJpbmcodHlwZSkgZm9yS2V5OkAidHlwZSJd
OworfQorCistIChUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZQoreworICAgIHJl
dHVybiBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPihb
c3VwZXIgc3RyaW5nRm9yS2V5OkAidHlwZSJdKTsKK30KKworLSAodm9pZClzZXRTdHJpbmc6KE5T
U3RyaW5nICopc3RyaW5nCit7CisgICAgW3N1cGVyIHNldFN0cmluZzpzdHJpbmcgZm9yS2V5OkAi
c3RyaW5nIl07Cit9CisKKy0gKE5TU3RyaW5nICopc3RyaW5nCit7CisgICAgcmV0dXJuIFtzdXBl
ciBzdHJpbmdGb3JLZXk6QCJzdHJpbmciXTsKK30KKworLSAodm9pZClzZXRBcnJheTooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICopYXJyYXkKK3sKKyAgICBbc3VwZXIgc2V0SW5zcGVjdG9yQXJyYXk6
aW5zcGVjdG9yU3RyaW5nQXJyYXkoYXJyYXkpIGZvcktleTpAImFycmF5Il07Cit9CisKKy0gKE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKWFycmF5Cit7CisgICAgcmV0dXJuIG9iamNTdHJpbmdBcnJh
eShbc3VwZXIgaW5zcGVjdG9yQXJyYXlGb3JLZXk6QCJhcnJheSJdKTsKK30KKworQGVuZAorCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5
cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xNjdkNTAxYjM4Yzk1NDQyYjk4NzlmMDQ4NGM5NzgwNWM5NDU2OGFhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBl
Lmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsODYyIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9y
QmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2Vu
ZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIK
KyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVi
bGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRj
aGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0
Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJl
ZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlh
c2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVy
OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1h
bGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2Vk
LXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIFR5cGVkZWZz
LgorbmFtZXNwYWNlIFJ1bnRpbWUgeworLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwor
dHlwZWRlZiBpbnQgUmVtb3RlT2JqZWN0SWQ7Cit9IC8vIFJ1bnRpbWUKKy8vIEVuZCBvZiB0eXBl
ZGVmcy4KKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQ
cm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0Fs
dGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7
CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBp
ZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOwor
ICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
dm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QK
K0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1p
dGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNo
ZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1p
dGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCisKKworCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09iakNFbnVtVHlwZSBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2Vk
LXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJm
YWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9p
ZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJ
ZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOwor
ICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Cit9CisKK0BlbmQKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5o
PgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
dHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0Njdm
YWNkNWVjODFlNWVmY2M0YWFhZTFlZDJlZjU3ZmZkNGUyYzUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwx
MDM1IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRGVi
dWdnZXIuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGVidWdnZXIuUmVhc29uIiwg
e0RpZWQ6ICJEaWVkIiwgRmFpbnRlZDogIkZhaW50ZWQiLCBIdW5ncnk6ICJIdW5ncnkifSk7Cisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0
cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIg
PSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmRE
aXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQor
cHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNo
ZXI7Cit9OworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgor
I2VuZGlmCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKy8v
IEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIERlYnVnZ2VyIHsKK2VudW0gY2xhc3Mg
UmVhc29uOworfSAvLyBEZWJ1Z2dlcgorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgor
CisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIERlYnVnZ2VyIHsKK3R5cGVkZWYgaW50IEJyZWFr
cG9pbnRJZDsKK30gLy8gRGVidWdnZXIKKworbmFtZXNwYWNlIFJ1bnRpbWUgewordHlwZWRlZiBp
bnQgT2JqZWN0SWQ7Cit0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD4gTHVj
a3lOdW1iZXJzOwordHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+IEJh
YnlOYW1lczsKK3R5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6T2JqZWN0SWQ+IE5ld09iamVjdHM7Cit0eXBlZGVmIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3Bv
aW50SWQ+IE9sZE9iamVjdHM7Cit0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IFN0b3BSZWFzb25zOworfSAvLyBS
dW50aW1lCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisK
K1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICBy
ZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIERlYnVnZ2VyIHsK
Ky8qICAqLworZW51bSBjbGFzcyBSZWFzb24geworICAgIERpZWQgPSAwLAorICAgIEZhaW50ZWQg
PSAxLAorICAgIEh1bmdyeSA9IDIsCit9OyAvLyBlbnVtIGNsYXNzIFJlYXNvbgorfSAvLyBEZWJ1
Z2dlcgorCisKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
UHJvdG9jb2xFbnVtVHlwZT4KK3N0ZDo6b3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBFbnVtcyBpbiB0aGUgJ0Rl
YnVnZ2VyJyBEb21haW4KK3RlbXBsYXRlPD4KK3N0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmluZyYpOworCit9IC8vIG5h
bWVzcGFjZSBUZXN0SGVscGVycworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMg
eworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsK
KyAgICAiRGllZCIsCisgICAgIkZhaW50ZWQiLAorICAgICJIdW5ncnkiLAorfTsKKworU3RyaW5n
IGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3Rh
bnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21haW4K
K3RlbXBsYXRlPD4KK3N0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6
OlJlYXNvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246OkRpZWQsCisgICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6RmFpbnRlZCwKKyAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpIdW5ncnks
CisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgaWYg
KHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ld
XSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJl
YXNvbiljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisK
KworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworCisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50
Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRh
dGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7
CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVy
biBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJv
bGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1
cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisK
KworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
RXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
RXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKworCisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVn
ZXIsIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uKSB7CisgICAgVGVzdFByb3RvY29sRGVidWdn
ZXJSZWFzb25EaWVkLAorICAgIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRmFpbnRlZCwKKyAg
ICBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkh1bmdyeSwKK307CisKKworCisKKworCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5
Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIE9iakNFbnVtVHlwZT4KK09iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSk7CisKKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQ
cm90b2NvbERlYnVnZ2VyUmVhc29uIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAg
IGNhc2UgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25EaWVkOgorICAgICAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCJEaWVkIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkZh
aW50ZWQ6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkZhaW50ZWQiKTsKKyAgICBjYXNl
IFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uSHVuZ3J5OgorICAgICAgICByZXR1cm4gQVNDSUlM
aXRlcmFsKCJIdW5ncnkiKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBUZXN0UHJv
dG9jb2xEZWJ1Z2dlclJlYXNvbiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gIkRpZWQiKQorICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sRGVidWdnZXJSZWFzb25EaWVkOworICAgIGlmICh2YWx1ZSA9PSAiRmFpbnRlZCIpCisgICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkZhaW50ZWQ7CisgICAgaWYgKHZh
bHVlID09ICJIdW5ncnkiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGVidWdnZXJSZWFz
b25IdW5ncnk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERlYnVnZ2VyUmVhc29uRGllZDsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChEZWJ1Z2dlckRvbWFpbikKKworKyAodm9pZClfcGFyc2VCcmVha3BvaW50SWQ6KE5T
TnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFy
c2VSZWFzb246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwor
CitAZW5kCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURv
bWFpbikKKworKyAodm9pZClfcGFyc2VPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUx1Y2t5TnVtYmVyczooTlNBcnJh
eS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAo
dm9pZClfcGFyc2VCYWJ5TmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlTmV3T2JqZWN0czooTlNBcnJh
eS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAo
dm9pZClfcGFyc2VPbGRPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVN0b3BSZWFzb25zOihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGVi
dWdnZXJEb21haW4pCisKKysgKHZvaWQpX3BhcnNlQnJlYWtwb2ludElkOihOU051bWJlciAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0g
KE5TTnVtYmVyICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VSZWFzb246KE5TTnVtYmVy
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFs
dWUgPSBAKEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERlYnVnZ2Vy
UmVhc29uPihwYXlsb2FkKSk7Cit9CisKK0BlbmQKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlT2JqZWN0
SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsK
KyAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJz
ZUx1Y2t5TnVtYmVyczooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNBcnJheS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5T
QXJyYXkvKjxOU051bWJlcj4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlQmFieU5h
bWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5T
U3RyaW5nPiovICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VOZXdPYmplY3RzOihOU0Fy
cmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNO
dW1iZXI+Ki8gY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TTnVtYmVyPiov
ICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VPbGRPYmplY3RzOihOU0FycmF5Lyo8TlNO
dW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNOdW1iZXI+Ki8g
Y2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TTnVtYmVyPiovICopcGF5bG9h
ZDsKK30KKworKyAodm9pZClfcGFyc2VTdG9wUmVhc29uczooTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7
CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9CisK
K0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNP
Tk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVl
cy5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MmU2NDAwNWRkODgwYTYwZGI5MzE4Mzg5MmRmMTU5MjA4NGRlNDQyZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAg
KzEsMTAzNyBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10
eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8g
UnVudGltZS4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJSdW50aW1lLkZhcm1Bbmlt
YWxzIiwge1BpZ3M6ICJQaWdzIiwgQ293czogIkNvd3MiLCBDYXRzOiAiQ2F0cyIsIEhlbnM6ICJI
ZW5zIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlJ1bnRpbWUuVHdvTGVnZ2Vk
QW5pbWFscyIsIHtEdWNrczogIkR1Y2tzIiwgSGVuczogIkhlbnMiLCBDcm93czogIkNyb3dzIiwg
RmxhbWluZ29zOiAiRmxhbWluZ29zIn0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5k
Q29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lk
IHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRj
aGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAg
QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERp
c3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmlu
ZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oIgorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Cisj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJv
dXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1l
c3BhY2UgUHJvdG9jb2wgeworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBS
dW50aW1lIHsKK2VudW0gY2xhc3MgRmFybUFuaW1hbHM7CitlbnVtIGNsYXNzIFR3b0xlZ2dlZEFu
aW1hbHM7Cit9IC8vIFJ1bnRpbWUKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKwor
CisKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZh
bHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25z
dGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1
ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0
SGVscGVycworCituYW1lc3BhY2UgUnVudGltZSB7CisvKiAgKi8KK2VudW0gY2xhc3MgRmFybUFu
aW1hbHMgeworICAgIFBpZ3MgPSAwLAorICAgIENvd3MgPSAxLAorICAgIENhdHMgPSAyLAorICAg
IEhlbnMgPSAzLAorfTsgLy8gZW51bSBjbGFzcyBGYXJtQW5pbWFscworLyogICovCitlbnVtIGNs
YXNzIFR3b0xlZ2dlZEFuaW1hbHMgeworICAgIER1Y2tzID0gNCwKKyAgICBIZW5zID0gMywKKyAg
ICBDcm93cyA9IDUsCisgICAgRmxhbWluZ29zID0gNiwKK307IC8vIGVudW0gY2xhc3MgVHdvTGVn
Z2VkQW5pbWFscworfSAvLyBSdW50aW1lCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgorc3RkOjpvcHRpb25hbDxQcm90
b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisK
Ky8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCit0ZW1wbGF0ZTw+CitzdGQ6Om9wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+
KGNvbnN0IFN0cmluZyYpOwordGVtcGxhdGU8Pgorc3RkOjpvcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJp
bmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4oY29uc3Qg
U3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK30gLy8gbmFtZXNwYWNl
IFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1l
bnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgor
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFt
ZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29u
c3RhbnRfdmFsdWVzW10gPSB7CisgICAgIlBpZ3MiLAorICAgICJDb3dzIiwKKyAgICAiQ2F0cyIs
CisgICAgIkhlbnMiLAorICAgICJEdWNrcyIsCisgICAgIkNyb3dzIiwKKyAgICAiRmxhbWluZ29z
IiwKK307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJl
dHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4gdGhlICdS
dW50aW1lJyBEb21haW4KK3RlbXBsYXRlPD4KK3N0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90
b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10g
PSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFu
aW1hbHM6OlBpZ3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6RmFybUFuaW1hbHM6OkNvd3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNhdHMsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkhlbnMsCisgICAgfTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09
IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJl
dHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHMpY29uc3RhbnRW
YWx1ZXNbaV07CisKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCit0ZW1wbGF0ZTw+Citz
dGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1h
bHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQoreworICAg
IHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpEdWNrcywK
KyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRB
bmltYWxzOjpIZW5zLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkNyb3dzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkZsYW1pbmdvcywKKyAgICB9Owor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICBpZiAocHJvdG9jb2xT
dHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAgICAg
ICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmlt
YWxzKWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKwor
Cit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwor
ICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVh
bGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10
eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
biA6IE5TT2JqZWN0CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNo
ZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5t
bQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91
bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
Lmg+CisKKworCisKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUnVu
dGltZUZhcm1BbmltYWxzKSB7CisgICAgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzUGln
cywKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDb3dzLAorICAgIFRlc3RQcm90
b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0NhdHMsCisgICAgVGVzdFByb3RvY29sUnVudGltZUZhcm1B
bmltYWxzSGVucywKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2Nv
bFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzKSB7CisgICAgVGVzdFByb3RvY29sUnVudGltZVR3b0xl
Z2dlZEFuaW1hbHNEdWNrcywKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFs
c0hlbnMsCisgICAgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNDcm93cywKKyAg
ICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0ZsYW1pbmdvcywKK307CisKKwor
CisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0
cmluZyhUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHMgdmFsdWUpCit7CisgICAgc3dpdGNo
KHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzOgor
ICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJQaWdzIik7CisgICAgY2FzZSBUZXN0UHJvdG9j
b2xSdW50aW1lRmFybUFuaW1hbHNDb3dzOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJD
b3dzIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDYXRzOgorICAg
ICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJDYXRzIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xS
dW50aW1lRmFybUFuaW1hbHNIZW5zOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJIZW5z
Iik7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgVGVzdFByb3RvY29sUnVudGltZUZh
cm1BbmltYWxzIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAg
IGlmICh2YWx1ZSA9PSAiUGlncyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1l
RmFybUFuaW1hbHNQaWdzOworICAgIGlmICh2YWx1ZSA9PSAiQ293cyIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDb3dzOworICAgIGlmICh2YWx1ZSA9PSAi
Q2F0cyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDYXRz
OworICAgIGlmICh2YWx1ZSA9PSAiSGVucyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xS
dW50aW1lRmFybUFuaW1hbHNIZW5zOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzOworfQorCitpbmxpbmUgU3Ry
aW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHMg
dmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50
aW1lVHdvTGVnZ2VkQW5pbWFsc0R1Y2tzOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJE
dWNrcyIpOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNIZW5z
OgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJIZW5zIik7CisgICAgY2FzZSBUZXN0UHJv
dG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0Nyb3dzOgorICAgICAgICByZXR1cm4gQVNDSUlM
aXRlcmFsKCJDcm93cyIpOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFu
aW1hbHNGbGFtaW5nb3M6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkZsYW1pbmdvcyIp
OworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29M
ZWdnZWRBbmltYWxzIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorewor
ICAgIGlmICh2YWx1ZSA9PSAiRHVja3MiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVu
dGltZVR3b0xlZ2dlZEFuaW1hbHNEdWNrczsKKyAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQorICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNIZW5zOworICAg
IGlmICh2YWx1ZSA9PSAiQ3Jvd3MiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGlt
ZVR3b0xlZ2dlZEFuaW1hbHNDcm93czsKKyAgICBpZiAodmFsdWUgPT0gIkZsYW1pbmdvcyIpCisg
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0ZsYW1pbmdv
czsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVGVzdFByb3RvY29sUnVu
dGltZVR3b0xlZ2dlZEFuaW1hbHNEdWNrczsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VGYXJtQW5pbWFsczooTlNOdW1i
ZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVR3
b0xlZ2dlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlRmFybUFuaW1hbHM6KE5TTnVtYmVy
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFs
dWUgPSBAKEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFJ1bnRpbWVG
YXJtQW5pbWFscz4ocGF5bG9hZCkpOworfQorCisrICh2b2lkKV9wYXJzZVR3b0xlZ2dlZEFuaW1h
bHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsK
KyAgICAqb3V0VmFsdWUgPSBAKEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90
b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzPihwYXlsb2FkKSk7Cit9CisKK0BlbmQKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW1wb3J0
IDx3dGYvQXNzZXJ0aW9ucy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90
eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOWMwNjZmNDAzODdl
MzI0NWJhN2FlN2RhZDRjNzMzZGZjMzhiMDNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDE5OTMgQEAK
KyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKyMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVz
LmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsK
K3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRp
c3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAg
ICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisK
KworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
b2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVk
ZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisj
IyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYKKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIkluc3BlY3RvckZy
b250ZW5kUm91dGVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworLy8gRm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgRGF0YWJhc2UgeworY2xhc3MgRXJyb3I7CitjbGFz
cyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKK2NsYXNzIFBhcmFtZXRlckJ1bmRsZTsKK2NsYXNz
IE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM7CitjbGFzcyBEdW1teU9iamVjdDsKK30g
Ly8gRGF0YWJhc2UKKworbmFtZXNwYWNlIFRlc3QgeworY2xhc3MgUGFyYW1ldGVyQnVuZGxlOwor
fSAvLyBUZXN0CisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworLy8gVHlwZWRl
ZnMuCituYW1lc3BhY2UgRGF0YWJhc2UgewordHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IEVycm9yTGlzdDsKK30g
Ly8gRGF0YWJhc2UKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworbmFtZXNwYWNlIERhdGFiYXNlIHsK
Ky8qIERhdGFiYXNlIGVycm9yLiAqLworY2xhc3MgRXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAorICAgICAgICBDb2RlU2V0
ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQp
CisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsK
KyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsK
KworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWls
ZGVyKFJlZjwvKkVycm9yKi9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAg
OiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKKyAgICBw
dWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIp
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Cisg
ICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
Q29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJjb2RlIiksIHZhbHVlKTsKKyAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxF
cnJvcj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBj
YW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgq
cmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJnJlc3VsdCkpOworICAgICAgICB9CisgICAg
fTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxF
cnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdlKC4u
LikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAg
ICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCkpOworICAgIH0KK307CisKK2NsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIDogcHVibGlj
IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7Cisg
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gMAorICAgIH07
CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJp
dmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8
LypPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAg
ICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgT3B0
aW9uYWxQYXJhbWV0ZXJCdW5kbGU7CisgICAgcHVibGljOgorCisgICAgICAgIFJlZjxPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUp
ID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7
CisgICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8T3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGU+Kj4oJnJlc3VsdCkpOworICAgICAgICB9CisgICAgfTsKKworICAg
IC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgp
CisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRD
b2x1bW5OYW1lcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gdmFs
dWUpCisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRBcnJheShBU0NJSUxp
dGVyYWwoImNvbHVtbk5hbWVzIiksIFdURk1vdmUodmFsdWUpKTsKKyAgICB9CisKKyAgICB2b2lk
IHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBJbnNwZWN0b3JP
YmplY3RCYXNlOjpzZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCB2YWx1ZSk7CisgICAg
fQorCisgICAgdm9pZCBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
SW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiks
IHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFZhbHVlcyhSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFz
ZTo6c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIFdURk1vdmUodmFsdWUpKTsKKyAg
ICB9CisKKyAgICB2b2lkIHNldFBheWxvYWQoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWU+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0VmFsdWUo
QVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIFdURk1vdmUodmFsdWUpKTsKKyAgICB9CisKKyAgICB2
b2lkIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
IHZhbHVlKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgiZXJyb3IiKSwgV1RGTW92ZSh2YWx1ZSkpOworICAgIH0KKworICAgIHZvaWQg
c2V0RXJyb3JMaXN0KFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3JM
aXN0PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldEFycmF5
KEFTQ0lJTGl0ZXJhbCgiZXJyb3JMaXN0IiksIFdURk1vdmUodmFsdWUpKTsKKyAgICB9Cit9Owor
CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAor
ICAgICAgICBDb2x1bW5OYW1lc1NldCA9IDEgPDwgMCwKKyAgICAgICAgTm90ZXNTZXQgPSAxIDw8
IDEsCisgICAgICAgIFRpbWVzdGFtcFNldCA9IDEgPDwgMiwKKyAgICAgICAgVmFsdWVzU2V0ID0g
MSA8PCAzLAorICAgICAgICBQYXlsb2FkU2V0ID0gMSA8PCA0LAorICAgICAgICBFcnJvclNldCA9
IDEgPDwgNSwKKyAgICAgICAgRXJyb3JMaXN0U2V0ID0gMSA8PCA2LAorICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoQ29sdW1uTmFtZXNTZXQgfCBOb3Rlc1NldCB8IFRpbWVzdGFtcFNldCB8IFZhbHVl
c1NldCB8IFBheWxvYWRTZXQgfCBFcnJvclNldCB8IEVycm9yTGlzdFNldCkKKyAgICB9OworCisg
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6
CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRF
IHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qUGFy
YW1ldGVyQnVuZGxlKi9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBt
X3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7
CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4m
IHNldENvbHVtbk5hbWVzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+
PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IENvbHVtbk5hbWVzU2V0KSwgcHJvcGVydHlfY29sdW1uTmFtZXNfYWxyZWFkeV9zZXQpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwg
dmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2x1bW5OYW1lc1NldD4oKTsK
KyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVz
KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBOb3Rlc1NldCksIHByb3BlcnR5X25vdGVzX2FscmVhZHlfc2V0KTsKKyAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCB2YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0PigpOworICAgICAgICB9
CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChk
b3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBUaW1lc3RhbXBTZXQpLCBwcm9wZXJ0eV90aW1lc3RhbXBfYWxyZWFkeV9zZXQpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB2
YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMo
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3Zh
bHVlc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJ
TGl0ZXJhbCgidmFsdWVzIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
VmFsdWVzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxv
YWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxv
YWRTZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgdmFsdWUpOworICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJvclNldCksIHByb3BlcnR5X2Vycm9yX2FscmVhZHlf
c2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJlcnJv
ciIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0PigpOwor
ICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yTGlzdFNldD4mIHNldEVy
cm9yTGlzdChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yTGlzdD4g
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBF
cnJvckxpc3RTZXQpLCBwcm9wZXJ0eV9lcnJvckxpc3RfYWxyZWFkeV9zZXQpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiZXJyb3JMaXN0IiksIHZhbHVlKTsK
KyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JMaXN0U2V0PigpOworICAgICAgICB9
CisKKyAgICAgICAgUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUGFyYW1ldGVy
QnVuZGxlKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAg
ICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9u
TnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
PFBhcmFtZXRlckJ1bmRsZT4qPigmcmVzdWx0KSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
LyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPFBhcmFtZXRlckJ1
bmRsZT4gcmVzdWx0ID0gUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0
Q29sdW1uTmFtZXMoLi4uKQorICAgICAqICAgICAuc2V0Tm90ZXMoLi4uKQorICAgICAqICAgICAu
c2V0VGltZXN0YW1wKC4uLikKKyAgICAgKiAgICAgLnNldFZhbHVlcyguLi4pCisgICAgICogICAg
IC5zZXRQYXlsb2FkKC4uLikKKyAgICAgKiAgICAgLnNldEVycm9yKC4uLikKKyAgICAgKiAgICAg
LnNldEVycm9yTGlzdCguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAg
c3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1
cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAg
fQorfTsKKworLyogQ29uZmxpY3RlZCBuYW1lcyBtYXkgY2F1c2UgZ2VuZXJhdGVkIGdldHRlcnMv
c2V0dGVycyB0byBjbGFzaCB3aXRoIGJ1aWx0LWluIEluc3BlY3Rvck9iamVjdCBtZXRob2RzLiAq
LworY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyA6IHB1YmxpYyBJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCisgICAgICAgIEludGVnZXJTZXQgPSAxIDw8IDAsCisgICAgICAgIEFy
cmF5U2V0ID0gMSA8PCAxLAorICAgICAgICBTdHJpbmdTZXQgPSAxIDw8IDIsCisgICAgICAgIFZh
bHVlU2V0ID0gMSA8PCAzLAorICAgICAgICBPYmplY3RTZXQgPSAxIDw8IDQsCisgICAgICAgIEFs
bEZpZWxkc1NldCA9IChJbnRlZ2VyU2V0IHwgQXJyYXlTZXQgfCBTdHJpbmdTZXQgfCBWYWx1ZVNl
dCB8IE9iamVjdFNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNs
YXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQor
CisgICAgICAgIEJ1aWxkZXIoUmVmPC8qT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyov
SW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92
ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAg
ICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0
czsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEludGVnZXJTZXQ+JiBz
ZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJbnRlZ2VyU2V0KSwgcHJvcGVydHlfaW50ZWdlcl9hbHJl
YWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
aW50ZWdlciIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEludGVnZXJT
ZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQXJyYXlTZXQ+JiBz
ZXRBcnJheShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgQXJyYXlTZXQpLCBwcm9wZXJ0eV9hcnJheV9hbHJlYWR5X3Nl
dCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiYXJyYXki
KSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxBcnJheVNldD4oKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFN0cmluZ1NldCksIHByb3BlcnR5X3N0cmluZ19hbHJlYWR5X3NldCk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic3RyaW5nIiksIHZh
bHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RyaW5nU2V0PigpOworICAgICAg
ICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlU2V0PiYgc2V0VmFsdWUoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFZhbHVlU2V0KSwgcHJvcGVydHlfdmFsdWVfYWxyZWFkeV9zZXQpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInZhbHVlIiksIHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVTZXQ+KCk7CisgICAgICAgIH0KKworICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgT2JqZWN0U2V0PiYgc2V0T2JqZWN0KGNvbnN0IFN0cmluZyYg
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBP
YmplY3RTZXQpLCBwcm9wZXJ0eV9vYmplY3RfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm9iamVjdCIpLCB2YWx1ZSk7CisgICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPE9iamVjdFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAg
IFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZWxlYXNlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihPYmpl
Y3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwg
Y2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUo
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+Kj4o
JnJlc3VsdCkpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3Rz
PiByZXN1bHQgPSBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOjpjcmVhdGUoKQorICAg
ICAqICAgICAuc2V0SW50ZWdlciguLi4pCisgICAgICogICAgIC5zZXRBcnJheSguLi4pCisgICAg
ICogICAgIC5zZXRTdHJpbmcoLi4uKQorICAgICAqICAgICAuc2V0VmFsdWUoLi4uKQorICAgICAq
ICAgICAuc2V0T2JqZWN0KC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAg
ICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAg
ICB9Cit9OworCit9IC8vIERhdGFiYXNlCisKK25hbWVzcGFjZSBUZXN0IHsKK2NsYXNzIFBhcmFt
ZXRlckJ1bmRsZSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVi
bGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIENvbHVt
bk5hbWVzU2V0ID0gMSA8PCAwLAorICAgICAgICBOb3Rlc1NldCA9IDEgPDwgMSwKKyAgICAgICAg
VGltZXN0YW1wU2V0ID0gMSA8PCAyLAorICAgICAgICBWYWx1ZXNTZXQgPSAxIDw8IDMsCisgICAg
ICAgIFBheWxvYWRTZXQgPSAxIDw8IDQsCisgICAgICAgIEVycm9yU2V0ID0gMSA8PCA1LAorICAg
ICAgICBBbGxGaWVsZHNTZXQgPSAoQ29sdW1uTmFtZXNTZXQgfCBOb3Rlc1NldCB8IFRpbWVzdGFt
cFNldCB8IFZhbHVlc1NldCB8IFBheWxvYWRTZXQgfCBFcnJvclNldCkKKyAgICB9OworCisgICAg
dGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6Cisg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qUGFyYW1l
dGVyQnVuZGxlKi9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jl
c3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7Cisg
ICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNl
dENvbHVtbk5hbWVzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiB2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENv
bHVtbk5hbWVzU2V0KSwgcHJvcGVydHlfY29sdW1uTmFtZXNfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgdmFs
dWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2x1bW5OYW1lc1NldD4oKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNv
bnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBOb3Rlc1NldCksIHByb3BlcnR5X25vdGVzX2FscmVhZHlfc2V0KTsKKyAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0PigpOworICAgICAgICB9CisK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChkb3Vi
bGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBUaW1lc3RhbXBTZXQpLCBwcm9wZXJ0eV90aW1lc3RhbXBfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB2YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVl
c19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0
ZXJhbCgidmFsdWVzIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFs
dWVzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRT
ZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxvYWRT
ZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgdmFsdWUpOworICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJvclNldCksIHByb3BlcnR5X2Vycm9yX2FscmVhZHlfc2V0
KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJlcnJvciIp
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0PigpOworICAg
ICAgICB9CisKKyAgICAgICAgUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUGFy
YW1ldGVyQnVuZGxlKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwor
CisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxl
YXNlTm9uTnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmPFBhcmFtZXRlckJ1bmRsZT4qPigmcmVzdWx0KSk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPFBhcmFt
ZXRlckJ1bmRsZT4gcmVzdWx0ID0gUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAgICAqICAg
ICAuc2V0Q29sdW1uTmFtZXMoLi4uKQorICAgICAqICAgICAuc2V0Tm90ZXMoLi4uKQorICAgICAq
ICAgICAuc2V0VGltZXN0YW1wKC4uLikKKyAgICAgKiAgICAgLnNldFZhbHVlcyguLi4pCisgICAg
ICogICAgIC5zZXRQYXlsb2FkKC4uLikKKyAgICAgKiAgICAgLnNldEVycm9yKC4uLikKKyAgICAg
KiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCit9IC8vIFRlc3QKKworCisK
K30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2Ug
UHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
KyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworCisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2Nv
bnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VS
VChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30K
KworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAo
ImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09i
amVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10
eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVy
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
b2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRp
b24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I7CitAY2xhc3Mg
VGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKK0BjbGFzcyBUZXN0
UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZTsKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRh
YmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM7CitAY2xhc3MgVGVzdFByb3RvY29s
RGF0YWJhc2VEdW1teU9iamVjdDsKK0BjbGFzcyBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVu
ZGxlOworCisKKworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0Bp
bnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVj
dAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5n
ICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihS
V0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOworLyogcmVxdWly
ZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOworLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7CitAZW5k
CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIDogUldJUHJvdG9jb2xK
U09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8
TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05P
YmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CisvKiBvcHRpb25hbCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1
bW5OYW1lczsKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0
cmluZyAqbm90ZXM7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWdu
KSBkb3VibGUgdGltZXN0YW1wOworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXM7CisvKiBvcHRpb25hbCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxv
YWQ7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yICplcnJvcjsKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqZXJy
b3JMaXN0OworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkK
K0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGUgOiBSV0lQcm90
b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlv
bmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
SlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1
bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3Rh
bXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciAqKWVycm9yIGVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+
Ki8gKillcnJvckxpc3Q7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29w
eSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lczsKKy8qIHJlcXVpcmVkICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbm90ZXM7CisvKiByZXF1aXJlZCAq
LyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdGltZXN0YW1wOworLyogcmVx
dWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICp2YWx1ZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWlu
KSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQ7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICplcnJvcjsK
Ky8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8VGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqZXJyb3JMaXN0OworQGVuZAorCitfX2F0dHJpYnV0
ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0
YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIDogUldJUHJvdG9jb2xKU09OT2Jq
ZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhJbnRlZ2VyOihOU1N0cmluZyAqKWludGVnZXIgYXJyYXk6KE5TU3RyaW5nICopYXJyYXkg
c3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyB2YWx1ZTooTlNTdHJpbmcgKil2YWx1ZSBvYmplY3Q6
KE5TU3RyaW5nICopb2JqZWN0OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IGNvcHkpIE5TU3RyaW5nICppbnRlZ2VyOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGNvcHkpIE5TU3RyaW5nICphcnJheTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqc3RyaW5nOworLyogcmVxdWlyZWQgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICp2YWx1ZTsKKy8qIHJlcXVpcmVkICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqb2JqZWN0OworQGVuZAorCitfX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sRGF0YWJhc2VEdW1teU9iamVjdCA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBh
eWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpT
T05PYmplY3QgKilqc29uT2JqZWN0OworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRs
ZSA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9h
ZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0
OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91
YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXls
b2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIGVycm9yOihUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yICopZXJyb3I7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lczsKKy8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbm90ZXM7CisvKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdGltZXN0YW1wOwor
LyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICp2YWx1ZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywg
cmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQ7CisvKiByZXF1aXJlZCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpl
cnJvcjsKK0BlbmQKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09iakNFbnVtVHlw
ZSBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKworCisKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
b2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2Ug
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKKworKyAodm9pZClf
cGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlRXJyb3JMaXN0OihOU0FycmF5Lyo8VGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZDsKKysgKHZvaWQpX3BhcnNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2Nv
bERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29s
RGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7CisrICh2b2lkKV9wYXJzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM6KFRlc3RQ
cm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlRHVtbXlPYmplY3Q6KFRl
c3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7CisKK0BlbmQKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
IChUZXN0RG9tYWluKQorCisrICh2b2lkKV9wYXJzZVBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3Rv
Y29sVGVzdFBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
IChEYXRhYmFzZURvbWFpbikKKworKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10p
OworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5p
dFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCisrICh2b2lkKV9wYXJzZUVycm9yTGlzdDooTlNB
cnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxv
YWQsIFtOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyBjbGFzc10pOworICAg
ICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKXBh
eWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQ
cm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90
b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgYWxsb2NdIGluaXRXaXRoUGF5bG9h
ZDpwYXlsb2FkXTsKK30KKworKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90
b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNE
aWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFz
ZVBhcmFtZXRlckJ1bmRsZSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCisr
ICh2b2lkKV9wYXJzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM6KFRlc3RQcm90b2Nv
bERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFBy
b3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIGFsbG9jXSBpbml0
V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKKysgKHZvaWQpX3BhcnNlRHVtbXlPYmplY3Q6KFRl
c3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFi
YXNlRHVtbXlPYmplY3QgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVu
ZAorQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFp
bikKKworKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbFRlc3RQYXJh
bWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3Nd
KTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUgYWxs
b2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgor
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorI2ltcG9ydCA8d3RmL0Fz
c2VydGlvbnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCitAaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2Fk
Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJt
ZXNzYWdlIl0sIEAibWVzc2FnZSIpOworICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNz
YWdlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJjb2RlIl0sIEAiY29kZSIpOworICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJd
IGludGVnZXJWYWx1ZV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3QKK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltqc29uT2Jq
ZWN0IHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5T
U3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQoreworICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKKworICAgIHNlbGYubWVz
c2FnZSA9IG1lc3NhZ2U7CisgICAgc2VsZi5jb2RlID0gY29kZTsKKworICAgIHJldHVybiBzZWxm
OworfQorCistICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIFtz
dXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKE5TU3Ry
aW5nICopbWVzc2FnZQoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2Fn
ZSJdOworfQorCistICh2b2lkKXNldENvZGU6KGludCljb2RlCit7CisgICAgW3N1cGVyIHNldElu
dGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Cit9CisKKy0gKGludCljb2RlCit7CisgICAgcmV0
dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOworfQorCitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlCisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHNlbGYuY29sdW1uTmFtZXMgPSBvYmpjQXJyYXlG
cm9tUGF5bG9hZDxOU1N0cmluZz4ocGF5bG9hZFtAImNvbHVtbk5hbWVzIl0pOworCisgICAgc2Vs
Zi5ub3RlcyA9IHBheWxvYWRbQCJub3RlcyJdOworCisgICAgc2VsZi50aW1lc3RhbXAgPSBbcGF5
bG9hZFtAInRpbWVzdGFtcCJdIGRvdWJsZVZhbHVlXTsKKworICAgIHNlbGYudmFsdWVzID0gcGF5
bG9hZFtAInZhbHVlcyJdOworCisgICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZFtAInBheWxvYWQi
XTsKKworICAgIHNlbGYuZXJyb3IgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2Nd
IGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AiZXJyb3IiXV07CisKKyAgICBzZWxmLmVycm9yTGlz
dCA9IG9iamNBcnJheUZyb21QYXlsb2FkPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KHBheWxv
YWRbQCJlcnJvckxpc3QiXSk7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3QK
K3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltqc29u
T2JqZWN0IHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0Q29sdW1uTmFtZXM6KE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCit7CisgICAgW3N1cGVyIHNldEluc3BlY3RvckFy
cmF5Omluc3BlY3RvclN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6QCJjb2x1bW5OYW1l
cyJdOworfQorCistIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcworeworICAg
IHJldHVybiBvYmpjU3RyaW5nQXJyYXkoW3N1cGVyIGluc3BlY3RvckFycmF5Rm9yS2V5OkAiY29s
dW1uTmFtZXMiXSk7Cit9CisKKy0gKHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5nICopbm90ZXMKK3sK
KyAgICBbc3VwZXIgc2V0U3RyaW5nOm5vdGVzIGZvcktleTpAIm5vdGVzIl07Cit9CisKKy0gKE5T
U3RyaW5nICopbm90ZXMKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm5vdGVz
Il07Cit9CisKKy0gKHZvaWQpc2V0VGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wCit7CisgICAg
W3N1cGVyIHNldERvdWJsZTp0aW1lc3RhbXAgZm9yS2V5OkAidGltZXN0YW1wIl07Cit9CisKKy0g
KGRvdWJsZSl0aW1lc3RhbXAKK3sKKyAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAInRp
bWVzdGFtcCJdOworfQorCistICh2b2lkKXNldFZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICopdmFsdWVzCit7CisgICAgW3N1cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9yS2V5OkAidmFsdWVz
Il07Cit9CisKKy0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAgIHJldHVy
biBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6
W1tzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXSB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCld
OworfQorCistICh2b2lkKXNldFBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxv
YWQKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OnBheWxvYWQgZm9yS2V5OkAicGF5bG9hZCJdOwor
fQorCistIChSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCit7CisgICAgcmV0dXJuIFtb
UldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbW3N1
cGVyIG9iamVjdEZvcktleTpAInBheWxvYWQiXSB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldOwor
fQorCistICh2b2lkKXNldEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IK
K3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OmVycm9yIGZvcktleTpAImVycm9yIl07Cit9CisKKy0g
KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgoreworICAgIHJldHVybiBbW1Rlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltbc3Vw
ZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXSB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldOworfQor
CistICh2b2lkKXNldEVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3I+Ki8gKillcnJvckxpc3QKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFX0lO
X0FSUkFZKGVycm9yTGlzdCwgW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgY2xhc3NdKTsKKyAg
ICBbc3VwZXIgc2V0SW5zcGVjdG9yQXJyYXk6aW5zcGVjdG9yT2JqZWN0QXJyYXkoZXJyb3JMaXN0
KSBmb3JLZXk6QCJlcnJvckxpc3QiXTsKK30KKworLSAoTlNBcnJheS8qPFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QKK3sKKyAgICByZXR1cm4gb2JqY0FycmF5PFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3I+KFtzdXBlciBpbnNwZWN0b3JBcnJheUZvcktleTpAImVycm9y
TGlzdCJdKTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJh
c2VQYXJhbWV0ZXJCdW5kbGUKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9u
bnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29sdW1uTmFtZXMiXSwg
QCJjb2x1bW5OYW1lcyIpOworICAgIHNlbGYuY29sdW1uTmFtZXMgPSBvYmpjQXJyYXlGcm9tUGF5
bG9hZDxOU1N0cmluZz4ocGF5bG9hZFtAImNvbHVtbk5hbWVzIl0pOworCisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Aibm90ZXMiXSwgQCJub3RlcyIp
OworICAgIHNlbGYubm90ZXMgPSBwYXlsb2FkW0Aibm90ZXMiXTsKKworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInRpbWVzdGFtcCJdLCBAInRpbWVz
dGFtcCIpOworICAgIHNlbGYudGltZXN0YW1wID0gW3BheWxvYWRbQCJ0aW1lc3RhbXAiXSBkb3Vi
bGVWYWx1ZV07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJ2YWx1ZXMiXSwgQCJ2YWx1ZXMiKTsKKyAgICBzZWxmLnZhbHVlcyA9IHBheWxvYWRb
QCJ2YWx1ZXMiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAInBheWxvYWQiXSwgQCJwYXlsb2FkIik7CisgICAgc2VsZi5wYXlsb2FkID0gcGF5
bG9hZFtAInBheWxvYWQiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAImVycm9yIl0sIEAiZXJyb3IiKTsKKyAgICBzZWxmLmVycm9yID0gW1tU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtA
ImVycm9yIl1dOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShw
YXlsb2FkW0AiZXJyb3JMaXN0Il0sIEAiZXJyb3JMaXN0Iik7CisgICAgc2VsZi5lcnJvckxpc3Qg
PSBvYmpjQXJyYXlGcm9tUGF5bG9hZDxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPihwYXlsb2Fk
W0AiZXJyb3JMaXN0Il0pOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Cit7
CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbanNvbk9i
amVjdCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb2x1bW5OYW1l
czooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICop
bm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQg
ZXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvciBlcnJvckxpc3Q6KE5TQXJy
YXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Cit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5h
bWVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShub3Rlcywg
QCJub3RlcyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkodmFs
dWVzLCBAInZhbHVlcyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QUk9QRVJUWShlcnJvciwgQCJlcnJvciIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkoZXJyb3JMaXN0LCBAImVycm9yTGlzdCIpOworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoZXJyb3JMaXN0LCBbVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciBjbGFzc10pOworCisgICAgc2VsZi5jb2x1bW5OYW1lcyA9IGNvbHVtbk5hbWVzOwor
ICAgIHNlbGYubm90ZXMgPSBub3RlczsKKyAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsK
KyAgICBzZWxmLnZhbHVlcyA9IHZhbHVlczsKKyAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkOwor
ICAgIHNlbGYuZXJyb3IgPSBlcnJvcjsKKyAgICBzZWxmLmVycm9yTGlzdCA9IGVycm9yTGlzdDsK
KworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcworeworICAgIFtzdXBlciBzZXRJbnNwZWN0b3JB
cnJheTppbnNwZWN0b3JTdHJpbmdBcnJheShjb2x1bW5OYW1lcykgZm9yS2V5OkAiY29sdW1uTmFt
ZXMiXTsKK30KKworLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKK3sKKyAg
ICByZXR1cm4gb2JqY1N0cmluZ0FycmF5KFtzdXBlciBpbnNwZWN0b3JBcnJheUZvcktleTpAImNv
bHVtbk5hbWVzIl0pOworfQorCistICh2b2lkKXNldE5vdGVzOihOU1N0cmluZyAqKW5vdGVzCit7
CisgICAgW3N1cGVyIHNldFN0cmluZzpub3RlcyBmb3JLZXk6QCJub3RlcyJdOworfQorCistIChO
U1N0cmluZyAqKW5vdGVzCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJub3Rl
cyJdOworfQorCistICh2b2lkKXNldFRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcAoreworICAg
IFtzdXBlciBzZXREb3VibGU6dGltZXN0YW1wIGZvcktleTpAInRpbWVzdGFtcCJdOworfQorCist
IChkb3VibGUpdGltZXN0YW1wCit7CisgICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0
aW1lc3RhbXAiXTsKK30KKworLSAodm9pZClzZXRWYWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKXZhbHVlcworeworICAgIFtzdXBlciBzZXRPYmplY3Q6dmFsdWVzIGZvcktleTpAInZhbHVl
cyJdOworfQorCistIChSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKK3sKKyAgICByZXR1
cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0
Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl0gdG9JbnNwZWN0b3JPYmplY3RdLmdldCgp
XTsKK30KKworLSAodm9pZClzZXRQYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXls
b2FkCit7CisgICAgW3N1cGVyIHNldE9iamVjdDpwYXlsb2FkIGZvcktleTpAInBheWxvYWQiXTsK
K30KKworLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAoreworICAgIHJldHVybiBb
W1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W1tz
dXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl0gdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXTsK
K30KKworLSAodm9pZClzZXRFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9y
Cit7CisgICAgW3N1cGVyIHNldE9iamVjdDplcnJvciBmb3JLZXk6QCJlcnJvciJdOworfQorCist
IChUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKK3sKKyAgICByZXR1cm4gW1tUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbW3N1
cGVyIG9iamVjdEZvcktleTpAImVycm9yIl0gdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXTsKK30K
KworLSAodm9pZClzZXRFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yPiovICopZXJyb3JMaXN0Cit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9J
Tl9BUlJBWShlcnJvckxpc3QsIFtUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGNsYXNzXSk7Cisg
ICAgW3N1cGVyIHNldEluc3BlY3RvckFycmF5Omluc3BlY3Rvck9iamVjdEFycmF5KGVycm9yTGlz
dCkgZm9yS2V5OkAiZXJyb3JMaXN0Il07Cit9CisKKy0gKE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Cit7CisgICAgcmV0dXJuIG9iamNBcnJheTxUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yPihbc3VwZXIgaW5zcGVjdG9yQXJyYXlGb3JLZXk6QCJlcnJv
ckxpc3QiXSk7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFi
YXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cworCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXls
b2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBu
aWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRb
QCJpbnRlZ2VyIl0sIEAiaW50ZWdlciIpOworICAgIHNlbGYuaW50ZWdlciA9IHBheWxvYWRbQCJp
bnRlZ2VyIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJhcnJheSJdLCBAImFycmF5Iik7CisgICAgc2VsZi5hcnJheSA9IHBheWxvYWRbQCJh
cnJheSJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0Aic3RyaW5nIl0sIEAic3RyaW5nIik7CisgICAgc2VsZi5zdHJpbmcgPSBwYXlsb2FkW0Ai
c3RyaW5nIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBh
eWxvYWRbQCJ2YWx1ZSJdLCBAInZhbHVlIik7CisgICAgc2VsZi52YWx1ZSA9IHBheWxvYWRbQCJ2
YWx1ZSJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0Aib2JqZWN0Il0sIEAib2JqZWN0Iik7CisgICAgc2VsZi5vYmplY3QgPSBwYXlsb2FkW0Ai
b2JqZWN0Il07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3QKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltqc29uT2JqZWN0IHRv
SW5zcGVjdG9yT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEludGVnZXI6KE5TU3RyaW5n
ICopaW50ZWdlciBhcnJheTooTlNTdHJpbmcgKilhcnJheSBzdHJpbmc6KE5TU3RyaW5nICopc3Ry
aW5nIHZhbHVlOihOU1N0cmluZyAqKXZhbHVlIG9iamVjdDooTlNTdHJpbmcgKilvYmplY3QKK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoaW50ZWdlciwgQCJpbnRl
Z2VyIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShhcnJheSwg
QCJhcnJheSIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoc3Ry
aW5nLCBAInN0cmluZyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkodmFsdWUsIEAidmFsdWUiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKG9iamVjdCwgQCJvYmplY3QiKTsKKworICAgIHNlbGYuaW50ZWdlciA9IGludGVnZXI7
CisgICAgc2VsZi5hcnJheSA9IGFycmF5OworICAgIHNlbGYuc3RyaW5nID0gc3RyaW5nOworICAg
IHNlbGYudmFsdWUgPSB2YWx1ZTsKKyAgICBzZWxmLm9iamVjdCA9IG9iamVjdDsKKworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKXNldEludGVnZXI6KE5TU3RyaW5nICopaW50ZWdlcgor
eworICAgIFtzdXBlciBzZXRTdHJpbmc6aW50ZWdlciBmb3JLZXk6QCJpbnRlZ2VyIl07Cit9CisK
Ky0gKE5TU3RyaW5nICopaW50ZWdlcgoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5
OkAiaW50ZWdlciJdOworfQorCistICh2b2lkKXNldEFycmF5OihOU1N0cmluZyAqKWFycmF5Cit7
CisgICAgW3N1cGVyIHNldFN0cmluZzphcnJheSBmb3JLZXk6QCJhcnJheSJdOworfQorCistIChO
U1N0cmluZyAqKWFycmF5Cit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJhcnJh
eSJdOworfQorCistICh2b2lkKXNldFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICBb
c3VwZXIgc2V0U3RyaW5nOnN0cmluZyBmb3JLZXk6QCJzdHJpbmciXTsKK30KKworLSAoTlNTdHJp
bmcgKilzdHJpbmcKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAInN0cmluZyJd
OworfQorCistICh2b2lkKXNldFZhbHVlOihOU1N0cmluZyAqKXZhbHVlCit7CisgICAgW3N1cGVy
IHNldFN0cmluZzp2YWx1ZSBmb3JLZXk6QCJ2YWx1ZSJdOworfQorCistIChOU1N0cmluZyAqKXZh
bHVlCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJ2YWx1ZSJdOworfQorCist
ICh2b2lkKXNldE9iamVjdDooTlNTdHJpbmcgKilvYmplY3QKK3sKKyAgICBbc3VwZXIgc2V0U3Ry
aW5nOm9iamVjdCBmb3JLZXk6QCJvYmplY3QiXTsKK30KKworLSAoTlNTdHJpbmcgKilvYmplY3QK
K3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm9iamVjdCJdOworfQorCitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVj
dAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W2pz
b25PYmplY3QgdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworQGVuZAorCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBh
eWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvbHVt
bk5hbWVzIl0sIEAiY29sdW1uTmFtZXMiKTsKKyAgICBzZWxmLmNvbHVtbk5hbWVzID0gb2JqY0Fy
cmF5RnJvbVBheWxvYWQ8TlNTdHJpbmc+KHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdKTsKKworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm5vdGVzIl0s
IEAibm90ZXMiKTsKKyAgICBzZWxmLm5vdGVzID0gcGF5bG9hZFtAIm5vdGVzIl07CisKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0aW1lc3RhbXAi
XSwgQCJ0aW1lc3RhbXAiKTsKKyAgICBzZWxmLnRpbWVzdGFtcCA9IFtwYXlsb2FkW0AidGltZXN0
YW1wIl0gZG91YmxlVmFsdWVdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AidmFsdWVzIl0sIEAidmFsdWVzIik7CisgICAgc2VsZi52YWx1ZXMg
PSBwYXlsb2FkW0AidmFsdWVzIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWRbQCJwYXlsb2FkIl0sIEAicGF5bG9hZCIpOworICAgIHNlbGYucGF5
bG9hZCA9IHBheWxvYWRbQCJwYXlsb2FkIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJlcnJvciJdLCBAImVycm9yIik7CisgICAgc2VsZi5l
cnJvciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2Fk
OnBheWxvYWRbQCJlcnJvciJdXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVj
dAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W2pz
b25PYmplY3QgdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29sdW1u
TmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmlu
ZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXls
b2FkIGVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKK3sKKyAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFt
ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG5vdGVzLCBA
Im5vdGVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh2YWx1
ZXMsIEAidmFsdWVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKGVycm9yLCBAImVycm9yIik7CisKKyAgICBzZWxmLmNvbHVtbk5hbWVzID0gY29s
dW1uTmFtZXM7CisgICAgc2VsZi5ub3RlcyA9IG5vdGVzOworICAgIHNlbGYudGltZXN0YW1wID0g
dGltZXN0YW1wOworICAgIHNlbGYudmFsdWVzID0gdmFsdWVzOworICAgIHNlbGYucGF5bG9hZCA9
IHBheWxvYWQ7CisgICAgc2VsZi5lcnJvciA9IGVycm9yOworCisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKHZvaWQpc2V0Q29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVt
bk5hbWVzCit7CisgICAgW3N1cGVyIHNldEluc3BlY3RvckFycmF5Omluc3BlY3RvclN0cmluZ0Fy
cmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6QCJjb2x1bW5OYW1lcyJdOworfQorCistIChOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcworeworICAgIHJldHVybiBvYmpjU3RyaW5nQXJy
YXkoW3N1cGVyIGluc3BlY3RvckFycmF5Rm9yS2V5OkAiY29sdW1uTmFtZXMiXSk7Cit9CisKKy0g
KHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5nICopbm90ZXMKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5n
Om5vdGVzIGZvcktleTpAIm5vdGVzIl07Cit9CisKKy0gKE5TU3RyaW5nICopbm90ZXMKK3sKKyAg
ICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm5vdGVzIl07Cit9CisKKy0gKHZvaWQpc2V0
VGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wCit7CisgICAgW3N1cGVyIHNldERvdWJsZTp0aW1l
c3RhbXAgZm9yS2V5OkAidGltZXN0YW1wIl07Cit9CisKKy0gKGRvdWJsZSl0aW1lc3RhbXAKK3sK
KyAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAInRpbWVzdGFtcCJdOworfQorCistICh2
b2lkKXNldFZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCit7CisgICAgW3N1
cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9yS2V5OkAidmFsdWVzIl07Cit9CisKKy0gKFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9i
amVjdCBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6
QCJ2YWx1ZXMiXSB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldOworfQorCistICh2b2lkKXNldFBh
eWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKK3sKKyAgICBbc3VwZXIgc2V0
T2JqZWN0OnBheWxvYWQgZm9yS2V5OkAicGF5bG9hZCJdOworfQorCistIChSV0lQcm90b2NvbEpT
T05PYmplY3QgKilwYXlsb2FkCit7CisgICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0
IGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInBh
eWxvYWQiXSB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldOworfQorCistICh2b2lkKXNldEVycm9y
OihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKK3sKKyAgICBbc3VwZXIgc2V0T2Jq
ZWN0OmVycm9yIGZvcktleTpAImVycm9yIl07Cit9CisKKy0gKFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgKillcnJvcgoreworICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
YWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJy
b3IiXSB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldOworfQorCitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJp
bmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRp
bWUtY2FzdHMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjFmZDJhYzgxZDVlY2Y0ZWQ2N2Q2MWRj
OWQwMTI0ZjhkYjQyYjU5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5n
LXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxNTg4IEBACisjIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIFRlc3QuCitJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRW51bSgiVGVzdC5VbmNhc3RlZEFuaW1hbHMiLCB7UGlnczogIlBpZ3MiLCBD
b3dzOiAiQ293cyIsIENhdHM6ICJDYXRzIiwgSGVuczogIkhlbnMifSk7CitJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRW51bSgiVGVzdC5DYXN0ZWRBbmltYWxzIiwge0R1Y2tzOiAiRHVja3MiLCBI
ZW5zOiAiSGVucyIsIENyb3dzOiAiQ3Jvd3MiLCBGbGFtaW5nb3M6ICJGbGFtaW5nb3MifSk7Cisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0
UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQ
dHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVy
ID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5k
RGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0K
K3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRj
aGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
IgorI2VuZGlmCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRl
ICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7
CisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIFRlc3QgeworY2xhc3MgVHlw
ZU5lZWRpbmdDYXN0OworY2xhc3MgUmVjdXJzaXZlT2JqZWN0MTsKK2NsYXNzIFJlY3Vyc2l2ZU9i
amVjdDI7CitlbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFsczsKK2VudW0gY2xhc3MgQ2FzdGVkQW5p
bWFsczsKK30gLy8gVGVzdAorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKy8v
IFR5cGVkZWZzLgorbmFtZXNwYWNlIFRlc3QgewordHlwZWRlZiBpbnQgQ2FzdGVkT2JqZWN0SWQ7
Cit0eXBlZGVmIGludCBVbmNhc3RlZE9iamVjdElkOworfSAvLyBUZXN0CisvLyBFbmQgb2YgdHlw
ZWRlZnMuCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVt
Q29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50
VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
VGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIFRlc3QgeworLyogQSBkdW1teSB0eXBlIHRoYXQgcmVx
dWlyZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24tcHJpbWl0aXZlIHJlZmVyZW5jZWQg
dHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxwZXJzLiAqLworY2xhc3MgVHlwZU5l
ZWRpbmdDYXN0IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJs
aWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgU3RyaW5n
U2V0ID0gMSA8PCAwLAorICAgICAgICBOdW1iZXJTZXQgPSAxIDw8IDEsCisgICAgICAgIEFuaW1h
bHNTZXQgPSAxIDw8IDIsCisgICAgICAgIElkU2V0ID0gMSA8PCAzLAorICAgICAgICBUcmVlU2V0
ID0gMSA8PCA0LAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU3RyaW5nU2V0IHwgTnVtYmVyU2V0
IHwgQW5pbWFsc1NldCB8IElkU2V0IHwgVHJlZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8
aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qVHlwZU5lZWRpbmdDYXN0
Ki9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZN
b3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAg
ICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBUeXBlTmVlZGluZ0Nhc3Q7CisgICAgcHVibGlj
OgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFN0cmluZ1NldCksIHByb3BlcnR5X3N0cmluZ19hbHJlYWR5X3NldCk7CisgICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic3RyaW5nIiksIHZhbHVlKTsK
KyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RyaW5nU2V0PigpOworICAgICAgICB9CisK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE51bWJlclNldD4mIHNldE51bWJlcihpbnQgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOdW1iZXJT
ZXQpLCBwcm9wZXJ0eV9udW1iZXJfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQt
PnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJudW1iZXIiKSwgdmFsdWUpOworICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxOdW1iZXJTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgQW5pbWFsc1NldD4mIHNldEFuaW1hbHMoSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6Q2FzdGVkQW5pbWFscyB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIEFuaW1hbHNTZXQpLCBwcm9wZXJ0eV9hbmltYWxzX2FscmVhZHlf
c2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJhbmlt
YWxzIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRW
YWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxBbmltYWxzU2V0Pigp
OworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IElkU2V0PiYgc2V0SWQoaW50
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
SWRTZXQpLCBwcm9wZXJ0eV9pZF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImlkIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8SWRTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgVHJlZVNldD4mIHNldFRyZWUoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJl
Y3Vyc2l2ZU9iamVjdDE+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVHJlZVNldCksIHByb3BlcnR5X3RyZWVfYWxyZWFkeV9zZXQpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInRyZWUiKSwgdmFsdWUp
OworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUcmVlU2V0PigpOworICAgICAgICB9CisK
KyAgICAgICAgUmVmPFR5cGVOZWVkaW5nQ2FzdD4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoVHlwZU5lZWRpbmdD
YXN0KSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAg
ICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVs
bCgpOworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFR5
cGVOZWVkaW5nQ2FzdD4qPigmcmVzdWx0KSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoK
KyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPFR5cGVOZWVkaW5nQ2Fz
dD4gcmVzdWx0ID0gVHlwZU5lZWRpbmdDYXN0OjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0U3Ry
aW5nKC4uLikKKyAgICAgKiAgICAgLnNldE51bWJlciguLi4pCisgICAgICogICAgIC5zZXRBbmlt
YWxzKC4uLikKKyAgICAgKiAgICAgLnNldElkKC4uLikKKyAgICAgKiAgICAgLnNldFRyZWUoLi4u
KQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKKy8qICAqLwor
ZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHMgeworICAgIFBpZ3MgPSA0LAorICAgIENvd3MgPSA1
LAorICAgIENhdHMgPSA2LAorICAgIEhlbnMgPSAxLAorfTsgLy8gZW51bSBjbGFzcyBVbmNhc3Rl
ZEFuaW1hbHMKKy8qICAqLworZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzIHsKKyAgICBEdWNrcyA9
IDAsCisgICAgSGVucyA9IDEsCisgICAgQ3Jvd3MgPSAyLAorICAgIEZsYW1pbmdvcyA9IDMsCit9
OyAvLyBlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDEgOiBw
dWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVt
IHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCisg
ICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAg
ICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKwor
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVy
KFJlZjwvKlJlY3Vyc2l2ZU9iamVjdDEqL0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAg
ICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9p
bl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIFJlY3Vy
c2l2ZU9iamVjdDE7CisgICAgcHVibGljOgorCisgICAgICAgIFJlZjxSZWN1cnNpdmVPYmplY3Qx
PiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKHNpemVvZihSZWN1cnNpdmVPYmplY3QxKSA9PSBzaXplb2YoSW5zcGVjdG9yT2Jq
ZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIFdU
Rk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFJlY3Vyc2l2ZU9iamVjdDE+Kj4oJnJlc3VsdCkp
OworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgorICAgICAqIFJlZjxSZWN1cnNpdmVPYmplY3QxPiByZXN1bHQgPSBSZWN1cnNpdmVPYmpl
Y3QxOjpjcmVhdGUoKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRp
YyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKwor
ICAgIHZvaWQgc2V0T2JqKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNp
dmVPYmplY3QyPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNl
dE9iamVjdChBU0NJSUxpdGVyYWwoIm9iaiIpLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorfTsK
KworY2xhc3MgUmVjdXJzaXZlT2JqZWN0MiA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAs
CisgICAgICAgIEFsbEZpZWxkc1NldCA9IDAKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNU
QVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsK
KyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qUmVjdXJzaXZlT2JqZWN0MiovSW5z
cGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShv
YmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
b0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAg
fQorICAgICAgICBmcmllbmQgY2xhc3MgUmVjdXJzaXZlT2JqZWN0MjsKKyAgICBwdWJsaWM6CisK
KyAgICAgICAgUmVmPFJlY3Vyc2l2ZU9iamVjdDI+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19u
b3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9i
amVjdDIpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAg
ICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25O
dWxsKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8
UmVjdXJzaXZlT2JqZWN0Mj4qPigmcmVzdWx0KSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
LyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPFJlY3Vyc2l2ZU9i
amVjdDI+IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVjdDI6OmNyZWF0ZSgpCisgICAgICogICAgIC5y
ZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRPYmooUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHZhbHVlKQorICAgIHsKKyAg
ICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgib2JqIiks
IFdURk1vdmUodmFsdWUpKTsKKyAgICB9Cit9OworCit9IC8vIFRlc3QKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmlt
YWxzPiB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOworI2VuZGlmIC8vICFBU1NF
UlRfRElTQUJMRUQKK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4geworc3RhdGljIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiYmIHZhbHVlKTsKKyNpZiAhQVNTRVJUX0RJU0FC
TEVECitzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlKik7CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorfTsKK3RlbXBsYXRl
PD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJz
aXZlT2JqZWN0MT4geworI2lmICFBU1NFUlRfRElTQUJMRUQKK3N0YXRpYyB2b2lkIGFzc2VydFZh
bHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsKKyNlbmRpZiAv
LyAhQVNTRVJUX0RJU0FCTEVECit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPiB7CisjaWYgIUFTU0VS
VF9ESVNBQkxFRAorc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZSopOworI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKK307CisK
K25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51
bVR5cGU+CitzdGQ6Om9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZyhjb25zdCBTdHJpbmcmKTsKKworLy8gRW51bXMgaW4gdGhlICdUZXN0JyBEb21haW4K
K3RlbXBsYXRlPD4KK3N0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5j
YXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKK3RlbXBsYXRlPD4KK3N0
ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFu
aW1hbHM+KGNvbnN0IFN0cmluZyYpOworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCit9
IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
cmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFBy
b3RvY29sIHsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgIkR1Y2tzIiwKKyAgICAiSGVu
cyIsCisgICAgIkNyb3dzIiwKKyAgICAiRmxhbWluZ29zIiwKKyAgICAiUGlncyIsCisgICAgIkNv
d3MiLAorICAgICJDYXRzIiwKK307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQg
Y29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8g
RW51bXMgaW4gdGhlICdUZXN0JyBEb21haW4KK3RlbXBsYXRlPD4KK3N0ZDo6b3B0aW9uYWw8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPihjb25z
dCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29u
c3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpVbmNhc3RlZEFuaW1hbHM6OlBpZ3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpDb3dzLAorICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6Q2F0cywKKyAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OkhlbnMs
CisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYg
KHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ld
XSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0
ZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
K30KKwordGVtcGxhdGU8Pgorc3RkOjpvcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykK
K3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6RHVja3Ms
CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFs
czo6SGVucywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0
ZWRBbmltYWxzOjpDcm93cywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpDYXN0ZWRBbmltYWxzOjpGbGFtaW5nb3MsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29u
c3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAoSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsK
KworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhl
bHBlcnMKKworCisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECit2b2lkIEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKQoreworICAgIEFTU0VS
VF9BUkcodmFsdWUsIHZhbHVlKTsKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIGJvb2wgY2FzdFN1
Y2NlZWRlZCA9IHZhbHVlLT5hc1N0cmluZyhyZXN1bHQpOworICAgIEFTU0VSVChjYXN0U3VjY2Vl
ZGVkKTsKKyAgICBBU1NFUlQocmVzdWx0ID09ICJEdWNrcyIgfHwgcmVzdWx0ID09ICJIZW5zIiB8
fCByZXN1bHQgPT0gIkNyb3dzIiB8fCByZXN1bHQgPT0gIkZsYW1pbmdvcyIpOworfQorI2VuZGlm
IC8vICFBU1NFUlRfRElTQUJMRUQKKworI2lmICFBU1NFUlRfRElTQUJMRUQKK3ZvaWQgQmluZGlu
Z1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3Nl
cnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSkK
K3sKKyAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gb2JqZWN0OworICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChv
YmplY3QpOworICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7
CisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIHN0cmluZ1BvcyA9IG9i
amVjdC0+ZmluZChBU0NJSUxpdGVyYWwoInN0cmluZyIpKTsKKyAgICAgICAgQVNTRVJUKHN0cmlu
Z1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxTdHJpbmc+Ojph
c3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShzdHJpbmdQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9
CisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIG51bWJlclBvcyA9IG9i
amVjdC0+ZmluZChBU0NJSUxpdGVyYWwoIm51bWJlciIpKTsKKyAgICAgICAgQVNTRVJUKG51bWJl
clBvcyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+Ojphc3Nl
cnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShudW1iZXJQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9Cisg
ICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGFuaW1hbHNQb3MgPSBvYmpl
Y3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJhbmltYWxzIikpOworICAgICAgICBBU1NFUlQoYW5pbWFs
c1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5
cGUoYW5pbWFsc1Bvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0KKyAgICB7CisgICAgICAgIEluc3Bl
Y3Rvck9iamVjdDo6aXRlcmF0b3IgaWRQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJp
ZCIpKTsKKyAgICAgICAgQVNTRVJUKGlkUG9zICE9IG9iamVjdC0+ZW5kKCkpOworICAgICAgICBC
aW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGlkUG9zLT52YWx1
ZS5nZXQoKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRv
ciB0cmVlUG9zID0gb2JqZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgidHJlZSIpKTsKKyAgICAgICAg
QVNTRVJUKHRyZWVQb3MgIT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVl
SGFzRXhwZWN0ZWRUeXBlKHRyZWVQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisKKyAgICBpbnQg
Zm91bmRQcm9wZXJ0aWVzQ291bnQgPSA1OworICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAh
PSBvYmplY3QtPnNpemUoKSkKKyAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBp
biBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsK
K30KKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECisKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6cnVudGltZUNhc3QoUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiYmIHZhbHVlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdDsK
KyAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKKyAgICBB
U1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworI2lmICFBU1NFUlRf
RElTQUJMRUQKKyAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5
cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHJlc3VsdC5nZXQoKSk7
CisjZW5kaWYgIC8vICFBU1NFUlRfRElTQUJMRUQKKyAgICBDT01QSUxFX0FTU0VSVChzaXplb2Yo
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2YoSW5z
cGVjdG9yT2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Kj4oc3RhdGlj
X2Nhc3Q8SW5zcGVjdG9yT2JqZWN0QmFzZSo+KHJlc3VsdC5nZXQoKSkpOworfQorCisKKyNpZiAh
QVNTRVJUX0RJU0FCTEVECit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKQoreworICAgIEFTU0VSVF9BUkcodmFsdWUsIHZh
bHVlKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CisgICAgYm9vbCBjYXN0
U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJUX1VOVVNFRChj
YXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKworICAgIGludCBmb3VuZFByb3BlcnRpZXND
b3VudCA9IDA7CisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIG9ialBv
cyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwoIm9iaiIpKTsKKyAgICAgICAgaWYgKG9ialBv
cyAhPSBvYmplY3QtPmVuZCgpKSB7CisgICAgICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShvYmpQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0
aWVzQ291bnQ7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50
ICE9IG9iamVjdC0+c2l6ZSgpKQorICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVz
IGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkp
OworfQorI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKKworI2lmICFBU1NFUlRfRElTQUJMRUQK
K3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVP
YmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZSogdmFsdWUpCit7CisgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOworICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKKyAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1
ZS0+YXNPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNh
c3RTdWNjZWVkZWQpOworCisgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKKyAgICB7
CisgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3Igb2JqUG9zID0gb2JqZWN0LT5maW5k
KEFTQ0lJTGl0ZXJhbCgib2JqIikpOworICAgICAgICBpZiAob2JqUG9zICE9IG9iamVjdC0+ZW5k
KCkpIHsKKyAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBvcy0+
dmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXpl
KCkpCisgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xu
Iiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Cit9CisjZW5kaWYgLy8g
IUFTU0VSVF9ESVNBQkxFRAorCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3Rz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
PgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250
cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVy
IGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQo
Y29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisK
K0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmpl
Y3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
clZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
KworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4K
KworCitAY2xhc3MgVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdDsKK0BjbGFzcyBUZXN0
UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MTsKK0BjbGFzcyBUZXN0UHJvdG9jb2xUZXN0UmVj
dXJzaXZlT2JqZWN0MjsKKworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9j
b2xUZXN0VW5jYXN0ZWRBbmltYWxzKSB7CisgICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5p
bWFsc1BpZ3MsCisgICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0Nvd3MsCisgICAg
VGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHMsCisgICAgVGVzdFByb3RvY29sVGVz
dFVuY2FzdGVkQW5pbWFsc0hlbnMsCit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBU
ZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscykgeworICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0
ZWRBbmltYWxzRHVja3MsCisgICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5zLAor
ICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzQ3Jvd3MsCisgICAgVGVzdFByb3RvY29s
VGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3MsCit9OworCisKK19fYXR0cmlidXRlX18oKHZpc2li
aWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRp
bmdDYXN0IDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
YXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25P
YmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5n
IG51bWJlcjooaW50KW51bWJlciBhbmltYWxzOihUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFs
cylhbmltYWxzIGlkZW50aWZpZXI6KGludClpZGVudGlmaWVyIHRyZWU6KFRlc3RQcm90b2NvbFRl
c3RSZWN1cnNpdmVPYmplY3QxICopdHJlZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBjb3B5KSBOU1N0cmluZyAqc3RyaW5nOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGFzc2lnbikgaW50IG51bWJlcjsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBhc3NpZ24pIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzIGFuaW1h
bHM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgaWRl
bnRpZmllcjsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRl
c3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICp0cmVlOworQGVuZAorCitfX2F0dHJpYnV0
ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVGVz
dFJlY3Vyc2l2ZU9iamVjdDEgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2Fk
OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopanNvbk9iamVjdDsKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZXRhaW4pIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyICpvYmo7CitAZW5kCisKK19f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAq
KXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKm9iajsKK0Bl
bmQKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWly
aW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09iakNFbnVtVHlwZSBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKworaW5saW5lIFN0cmluZyB0b1By
b3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHMgdmFsdWUpCit7Cisg
ICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmlt
YWxzUGlnczoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiUGlncyIpOworICAgIGNhc2Ug
VGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0Nvd3M6CisgICAgICAgIHJldHVybiBBU0NJ
SUxpdGVyYWwoIkNvd3MiKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1h
bHNDYXRzOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJDYXRzIik7CisgICAgY2FzZSBU
ZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzSGVuczoKKyAgICAgICAgcmV0dXJuIEFTQ0lJ
TGl0ZXJhbCgiSGVucyIpOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIFRlc3RQcm90
b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHMgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJQaWdzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzOworICAgIGlmICh2YWx1ZSA9PSAiQ293cyIp
CisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ293czsKKyAg
ICBpZiAodmFsdWUgPT0gIkNhdHMiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFVu
Y2FzdGVkQW5pbWFsc0NhdHM7CisgICAgaWYgKHZhbHVlID09ICJIZW5zIikKKyAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNIZW5zOworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzUGln
czsKK30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFRlc3RD
YXN0ZWRBbmltYWxzIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVz
dFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNEdWNrczoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0
ZXJhbCgiRHVja3MiKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzSGVu
czoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiSGVucyIpOworICAgIGNhc2UgVGVzdFBy
b3RvY29sVGVzdENhc3RlZEFuaW1hbHNDcm93czoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJh
bCgiQ3Jvd3MiKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRmxhbWlu
Z29zOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJGbGFtaW5nb3MiKTsKKyAgICB9Cit9
CisKK3RlbXBsYXRlPD4KK2lubGluZSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscyBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0g
IkR1Y2tzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVj
a3M7CisgICAgaWYgKHZhbHVlID09ICJIZW5zIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bFRlc3RDYXN0ZWRBbmltYWxzSGVuczsKKyAgICBpZiAodmFsdWUgPT0gIkNyb3dzIikKKyAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzQ3Jvd3M7CisgICAgaWYgKHZh
bHVlID09ICJGbGFtaW5nb3MiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdENhc3Rl
ZEFuaW1hbHNGbGFtaW5nb3M7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3M7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3Rz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2Vy
LmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
PgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKKworKyAodm9pZClfcGFyc2VUeXBlTmVlZGlu
Z0Nhc3Q6KFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUNhc3RlZE9iamVjdElkOihOU051bWJl
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlVW5j
YXN0ZWRPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7CisrICh2b2lkKV9wYXJzZVVuY2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUNhc3RlZEFuaW1hbHM6KE5T
TnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFy
c2VSZWN1cnNpdmVPYmplY3QxOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlUmVjdXJzaXZl
T2JqZWN0MjooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKKworKyAodm9pZClfcGFyc2VUeXBlTmVl
ZGluZ0Nhc3Q6KFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBF
KHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQ
cm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2Fk
XTsKK30KKworKyAodm9pZClfcGFyc2VDYXN0ZWRPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU051
bWJlciAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlVW5jYXN0ZWRPYmplY3RJZDooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOworICAgICpv
dXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlVW5jYXN0
ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAor
eworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNs
YXNzXSk7CisgICAgKm91dFZhbHVlID0gQChJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxU
ZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzPihwYXlsb2FkKSk7Cit9CisKKysgKHZvaWQp
X3BhcnNlQ2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U1N0cmluZyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IEAoSW5zcGVjdG9yOjpmcm9tUHJvdG9j
b2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+KHBheWxvYWQpKTsKK30KKwor
KyAodm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QxOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZl
T2JqZWN0MSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwor
ICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgYWxsb2Nd
IGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworKyAodm9pZClfcGFyc2VSZWN1cnNpdmVP
YmplY3QyOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFBy
b3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2Fk
XTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvclZhbHVlcy5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdFR5cGVO
ZWVkaW5nQ2FzdAorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5T
RGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJzdHJpbmciXSwgQCJzdHJpbmciKTsK
KyAgICBzZWxmLnN0cmluZyA9IHBheWxvYWRbQCJzdHJpbmciXTsKKworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm51bWJlciJdLCBAIm51bWJlciIp
OworICAgIHNlbGYubnVtYmVyID0gW3BheWxvYWRbQCJudW1iZXIiXSBpbnRlZ2VyVmFsdWVdOwor
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYW5p
bWFscyJdLCBAImFuaW1hbHMiKTsKKyAgICBzZWxmLmFuaW1hbHMgPSBmcm9tUHJvdG9jb2xTdHJp
bmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+KHBheWxvYWRbQCJhbmltYWxzIl0pOwor
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiaWRl
bnRpZmllciJdLCBAImlkZW50aWZpZXIiKTsKKyAgICBzZWxmLmlkZW50aWZpZXIgPSBbcGF5bG9h
ZFtAImlkIl0gaW50ZWdlclZhbHVlXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkocGF5bG9hZFtAInRyZWUiXSwgQCJ0cmVlIik7CisgICAgc2VsZi50cmVlID0g
W1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxvY10gaW5pdFdpdGhQYXlsb2Fk
OnBheWxvYWRbQCJ0cmVlIl1dOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0
Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbanNv
bk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTdHJpbmc6
KE5TU3RyaW5nICopc3RyaW5nIG51bWJlcjooaW50KW51bWJlciBhbmltYWxzOihUZXN0UHJvdG9j
b2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzIGlkZW50aWZpZXI6KGludClpZGVudGlmaWVyIHRy
ZWU6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICopdHJlZQoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShzdHJpbmcsIEAic3RyaW5nIik7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh0cmVlLCBAInRyZWUiKTsKKwor
ICAgIHNlbGYuc3RyaW5nID0gc3RyaW5nOworICAgIHNlbGYubnVtYmVyID0gbnVtYmVyOworICAg
IHNlbGYuYW5pbWFscyA9IGFuaW1hbHM7CisgICAgc2VsZi5pZGVudGlmaWVyID0gaWRlbnRpZmll
cjsKKyAgICBzZWxmLnRyZWUgPSB0cmVlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpc2V0U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZworeworICAgIFtzdXBlciBzZXRTdHJpbmc6
c3RyaW5nIGZvcktleTpAInN0cmluZyJdOworfQorCistIChOU1N0cmluZyAqKXN0cmluZworewor
ICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAic3RyaW5nIl07Cit9CisKKy0gKHZvaWQp
c2V0TnVtYmVyOihpbnQpbnVtYmVyCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6bnVtYmVyIGZv
cktleTpAIm51bWJlciJdOworfQorCistIChpbnQpbnVtYmVyCit7CisgICAgcmV0dXJuIFtzdXBl
ciBpbnRlZ2VyRm9yS2V5OkAibnVtYmVyIl07Cit9CisKKy0gKHZvaWQpc2V0QW5pbWFsczooVGVz
dFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscworeworICAgIFtzdXBlciBzZXRTdHJp
bmc6dG9Qcm90b2NvbFN0cmluZyhhbmltYWxzKSBmb3JLZXk6QCJhbmltYWxzIl07Cit9CisKKy0g
KFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMKK3sKKyAgICByZXR1cm4gZnJv
bVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzPihbc3VwZXIgc3Ry
aW5nRm9yS2V5OkAiYW5pbWFscyJdKTsKK30KKworLSAodm9pZClzZXRJZGVudGlmaWVyOihpbnQp
aWRlbnRpZmllcgoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmlkZW50aWZpZXIgZm9yS2V5OkAi
aWQiXTsKK30KKworLSAoaW50KWlkZW50aWZpZXIKK3sKKyAgICByZXR1cm4gW3N1cGVyIGludGVn
ZXJGb3JLZXk6QCJpZCJdOworfQorCistICh2b2lkKXNldFRyZWU6KFRlc3RQcm90b2NvbFRlc3RS
ZWN1cnNpdmVPYmplY3QxICopdHJlZQoreworICAgIFtzdXBlciBzZXRPYmplY3Q6dHJlZSBmb3JL
ZXk6QCJ0cmVlIl07Cit9CisKKy0gKFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICop
dHJlZQoreworICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFs
bG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInRyZWUi
XSB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MQorCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXls
b2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBu
aWw7CisKKyAgICBzZWxmLm9iaiA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIg
YWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0Aib2JqIl1dOworCisgICAgcmV0dXJuIHNl
bGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpT
T05PYmplY3QgKilqc29uT2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0
aEluc3BlY3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNl
dE9iajooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKilvYmoKK3sKKyAgICBbc3Vw
ZXIgc2V0T2JqZWN0Om9iaiBmb3JLZXk6QCJvYmoiXTsKK30KKworLSAoVGVzdFByb3RvY29sVGVz
dFJlY3Vyc2l2ZU9iamVjdDIgKilvYmoKK3sKKyAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xUZXN0
UmVjdXJzaXZlT2JqZWN0MiBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W1tzdXBlciBv
YmplY3RGb3JLZXk6QCJvYmoiXSB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldOworfQorCitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MgorCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0
cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLm9iaiA9IFtbVGVzdFByb3RvY29sVGVz
dFJlY3Vyc2l2ZU9iamVjdDEgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0Aib2JqIl1d
OworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Cit7CisgICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rv
ck9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxm
OworfQorCistICh2b2lkKXNldE9iajooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEg
KilvYmoKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0Om9iaiBmb3JLZXk6QCJvYmoiXTsKK30KKwor
LSAoVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKilvYmoKK3sKKyAgICByZXR1cm4g
W1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxvY10gaW5pdFdpdGhJbnNwZWN0
b3JPYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXSB0b0luc3BlY3Rvck9iamVjdF0u
Z2V0KCldOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5t
bQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tYXZhaWxhYmlsaXR5Lmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFp
bi1hdmFpbGFiaWxpdHkuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNmVlMmM2MDAxODBiZTBhZTEzNTk0MGI0
NDdlMTg4NzFkMjdhZWI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tYXZhaWxhYmls
aXR5Lmpzb24KQEAgLTAsMCArMSw5IEBACit7CisgICAgImRvbWFpbiI6ICJXZWJPbmx5IiwKKyAg
ICAiYXZhaWxhYmlsaXR5IjogIndlYmIiLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgewor
ICAgICAgICAgICAgIm5hbWUiOiAiZW5hYmxlIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmJhYjc2Y2E2Mjc5Y2UzYTRhY2Y3OTg1NTAwYjMwYjdkMWNmYjhmMGQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24K
QEAgLTAsMCArMSwxNiBAQAoreworICAgICJkb21haW4iOiAiT3ZlcmxheSIsCisgICAgImNvbW1h
bmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJwcm9jZXNzUG9pbnRzIiwK
KyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
b2ludCIsICJ0eXBlIjogIm51bWJlciIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJy
ZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0MSIsICJ0eXBlIjog
InN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3VsdDIiLCAidHlwZSI6
ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFp
bC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzhiYjE1YzA0YjY1OWI5Y2I5YWZkZTM0Y2Q1NzIyYmE5YzZkNGRhOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5q
c29uCkBAIC0wLDAgKzEsMTYgQEAKK3sKKyAgICAiZG9tYWluIjogIk92ZXJsYXkiLAorICAgICJj
b21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAicHJvY2Vzc1BvaW50
cyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInBvaW50MSIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInBvaW50MiIsICJ0eXBlIjogIm51bWJlciIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAg
ICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5
cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5
cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24t
ZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzZDNiM2Nj
NjQyM2NlYzI1YTY3ZGE5MTMyYTc2Njg2NzU1YTQ0NDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9u
LWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbgpAQCAtMCwwICsxLDEyIEBACit7
CisgICAgImRvbWFpbiI6ICJPdmVybGF5IiwKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7Cisg
ICAgICAgICAgICAibmFtZSI6ICJwcm9jZXNzZWRQb2ludHMiLAorICAgICAgICAgICAgInBhcmFt
ZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludCIsICJ0eXBlIjogIm51
bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50IiwgInR5cGUiOiAibnVt
YmVyIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWls
LW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtdHlw
ZS1kZWNsYXJhdGlvbnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MDJmYzZhMzI3MGE2NDZhNDUwNDQ3ZmRj
MDQwMTM5OTVhOTQyYmYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1k
ZWNsYXJhdGlvbnMuanNvbgpAQCAtMCwwICsxLDE1IEBACit7CisgICAgImRvbWFpbiI6ICJSdW50
aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1v
dGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0sCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAg
ICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBv
YmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9u
LWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1t
ZW1iZXItbmFtZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZWJhY2VlOGIyM2UxZWEzNDA1ZDhhYzBhMDAx
NjIwNzAxMGM5NDg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1i
ZXItbmFtZXMuanNvbgpAQCAtMCwwICsxLDE1IEBACitbCit7CisgICAgImRvbWFpbiI6ICJPdmVy
bGF5VHlwZXMiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
IlBvaW50IiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJv
cGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIngiLCAidHlwZSI6ICJpbnRl
Z2VyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAieCIsICJ0eXBlIjogImludGVnZXIi
IH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwt
b24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpz
b24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjMyYTdjMzI0OWE0MGJkNDQ3ZTE5YTkyYThlNTY5MzBkM2Y4NTk1Nwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uCkBAIC0wLDAg
KzEsMTAgQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKKyAgICAgICAgICAg
ICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFtdCisgICAgICAgIH0KKyAg
ICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXIt
ZmxhZy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNv
bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43MzA4ZGI5OTJkNjUyNTdmMmI1YzYzMjdlMGNhMzU0NTAyZDYxNTRhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZs
YWcuanNvbgpAQCAtMCwwICsxLDE4IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisg
ICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIs
CisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0KKyAg
ICBdLAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRp
ZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBb
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogInN0cmlu
ZyIsICJvcHRpb25hbCI6IDAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YWZlYTU1NWVjNGZlMDg2NjI3OGUxZmNkNzMzNTQyNDJkZWZkMWJkNAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KQEAgLTAsMCAr
MSwxNiBAQAorWworeworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBl
IjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3Iu
IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNz
YWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRl
Z2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiwgIm9wdGlvbmFsIjogMCB9CisgICAg
ICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXN0cmlu
Zy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1zdHJpbmctdHlwZWQt
b3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MDEyYzc5YjZiMzhjMjFk
ZmY2MDdmZWM5ZWU5MGIyODAzMTBmOTA4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1zdHJpbmct
dHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgpAQCAtMCwwICsxLDE4IEBACit7Cisg
ICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmci
LAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFi
YXNlIG9iamVjdC4iCisgICAgICAgIH0KKyAgICBdLAorICAgICJldmVudHMiOiBbCisgICAgICAg
IHsKKyAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAor
ICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJj
b2x1bW5OYW1lcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6ICJ0cnVlIiB9CisgICAg
ICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXN0cmluZy10
eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9u
YWwtdHlwZS1tZW1iZXIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTNlZjI4YThmODgxNGNjNjE3ZmI1ZDVi
YzIxMzA2ZDBhYWQ0ZmQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0
aW9uYWwtdHlwZS1tZW1iZXIuanNvbgpAQCAtMCwwICsxLDE2IEBACitbCit7CisgICAgImRvbWFp
biI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAi
aWQiOiAiRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRp
ZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3Ry
aW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJy
b3IgY29kZS4iLCAib3B0aW9uYWwiOiAiZmFsc2UiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAg
fQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10
eXBlLXJlZmVyZW5jZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVm
ZXJlbmNlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTliNzU5MGNjYzZmNmJjMzQ0M2E0YTI4M2NhNmZjY2Zk
ZjMyNzczNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10
eXBlLXJlZmVyZW5jZS5qc29uCkBAIC0wLDAgKzEsMTMgQEAKK1sKK3sKKyAgICAiZG9tYWluIjog
IlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
IlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAg
ICAgICAiJHJlZiI6ICJTb21lVHlwZSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5p
cXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlw
ZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YzgzYmJmY2U0
MTJiOGIwOWRmNzQ3YTg3NWU4MDM2ZGZlY2NiYzM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10
eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uCkBAIC0wLDAgKzEsMTggQEAKK3sK
KyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmlu
ZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0
YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfQorICAgIF0sCisgICAgImV2ZW50cyI6IFsKKyAgICAg
ICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIs
CisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiRGF0YWJhc2VJZCIgfQorICAgICAgICAgICAgXQorICAg
ICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5h
bWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTMxOTAxZTRhOWFkOTkzNmIwMWJiYWVkOTdhMWQ0ZGEzNDg0NzhiMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24KQEAgLTAsMCArMSwxMCBAQAor
eworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgewor
ICAgICAgICAgICAgImlkIjogImRhdGFiYXNlSWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50
ZWdlciIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2Yg
RGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24t
dW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXVu
a25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmQ2ODg3YTI3NDExOTAwYTgwZDUwZjAwM2VhYzM2YzEzYTk5ZmFlNTgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29u
CkBAIC0wLDAgKzEsMTIgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0
eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwK
KyAgICAgICAgICAgICJ0eXBlIjogImRyYWdvbiIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30KK10KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYjgxN2RiNTA0NGRjMWYyODU1NzAwOGMxZjE3NjFmMWIwNjhmNGNlNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29u
CkBAIC0wLDAgKzEsMTUgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkZhbnRhc3kiLAorICAgICJ0
eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkRyYWdvbkVnZyIsCisgICAg
ICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEg
ZHJhZ29uIGVnZy4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb2xvciIsICIkcmVmIjogIkNvbG9yIiB9CisgICAgICAgICAgICBdCisg
ICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVh
dHVyZS1ndWFyZHMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29u
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjY3Y2Y4ZTU4MmY2NWFlNmZjNjE1NjkyODgyY2IwZjY1NzQ2MDEwOGEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgpA
QCAtMCwwICsxLDM2IEBACitbCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMSIsCisgICAgImZl
YXR1cmVHdWFyZCI6ICJQTEFURk9STShXRUJfQ09NTUFORFMpIiwKKyAgICAiY29tbWFuZHMiOiBb
CisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZSIsCisgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBh
IGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3Mu
IgorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmsyIiwKKyAg
ICAiZmVhdHVyZUd1YXJkIjogIlBMQVRGT1JNKFdFQl9UWVBFUykiLAorICAgICJ0eXBlcyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk5ldHdvcmtFcnJvciIsCisgICAgICAgICAg
ICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0
aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29k
ZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KKyAg
ICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJOZXR3
b3JrMyIsCisgICAgImZlYXR1cmVHdWFyZCI6ICJQTEFURk9STShXRUJfRVZFTlRTKSIsCisgICAg
ImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAicmVzb3VyY2VMb2Fk
ZWQiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgcmVzb3VyY2Ugd2FzIGxvYWRlZC4i
CisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50
LWRvbWFpbi5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zYmY0ZGZmNWNjYzI5ZDBlOGMxZmE0YjJkZDMyODNlNzcxNjMyYzdkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgpAQCAtMCwwICsxLDIyIEBACitb
Cit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6
ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRl
bnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4iOiAiUnVudGlt
ZTIiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90
ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAg
IF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2hh
ZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjBhMGMxNTUyNzUw
ZjYyODI4OGNmZjQxOTM5NmJkNmY2YWY3NDlmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3NoYWRvd2VkLW9w
dGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCkBAIC0wLDAgKzEsMzEgQEAKK3sKKyAgICAiZG9tYWlu
IjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlk
IjogIktleVBhdGgiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJLZXkgcGF0aC4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJ0eXBlIiwK
KyAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICAgICAg
ICAgImVudW0iOiBbIm51bGwiLCAic3RyaW5nIiwgImFycmF5Il0sCisgICAgICAgICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJLZXkgcGF0aCB0eXBlLiIKKyAgICAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAic3RyaW5nIiwK
KyAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICAgICAg
ICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IlN0cmluZyB2YWx1ZS4iCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICJuYW1lIjogImFycmF5IiwKKyAgICAgICAgICAgICAgICAgICAg
InR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAor
ICAgICAgICAgICAgICAgICAgICAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAg
ICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkFycmF5IHZhbHVlLiIKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24t
YWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiYzlkNTM5NDc4ZGI0OTVj
OTYwNjdlY2Q1NGE5NWJlNTJmOGQwNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9u
LWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgpAQCAtMCwwICsxLDEwIEBACit7CisgICAgImRv
bWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwK
KyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgor
ICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBl
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZmIwOGJk
OTQwYjY0ZmI2NjAzOTY1Y2UxYjA0ZDNmYzk3NDllYTkwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KQEAgLTAsMCArMSw1MCBAQAorWworeworICAgICJk
b21haW4iOiAiRGVidWdnZXIiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIkJyZWFrcG9pbnRJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVhc29uIiwKKyAgICAg
ICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsiRGllZCIsICJG
YWludGVkIiwgIkh1bmdyeSJdCisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4i
OiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQi
OiAiT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkx1Y2t5TnVtYmVycyIsCisgICAgICAgICAg
ICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICJ0eXBlIjogImludGVn
ZXIiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkJhYnlOYW1l
cyIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7
ICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAi
aWQiOiAiTmV3T2JqZWN0cyIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAg
ICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIk9iamVjdElkIiB9CisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJPbGRPYmplY3RzIiwKKyAgICAgICAgICAgICJ0eXBlIjog
ImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiRGVidWdnZXIuQnJlYWtw
b2ludElkIiB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJTdG9w
UmVhc29ucyIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRl
bXMiOiB7ICIkcmVmIjogIkRlYnVnZ2VyLlJlYXNvbiIgfQorICAgICAgICB9CisgICAgXQorfQor
XQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWYwYWVlOWM5MWI5NWFiYWYzODdlNzJhOTFh
MzMzOGI1NzlkYTlhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBl
Lmpzb24KQEAgLTAsMCArMSwxNSBAQAoreworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAg
InR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRmFybUFuaW1hbHMiLAor
ICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJQaWdz
IiwgIkNvd3MiLCAiQ2F0cyIsICJIZW5zIl0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIlR3b0xlZ2dlZEFuaW1hbHMiLAorICAgICAgICAgICAgInR5cGUiOiAic3Ry
aW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJEdWNrcyIsICJIZW5zIiwgIkNyb3dzIiwgIkZs
YW1pbmdvcyJdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9u
LW9iamVjdC10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMTc4MzA5MTk3M2JjZjM3NTQ1Y2Q3NTk2MDkxODY3ZjhjYTI1ZDg1YQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgpAQCAtMCwwICsxLDgzIEBA
CitbCit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgImRlc2NyaXB0aW9uIjogIlRl
c3QgdHlwZSBidWlsZGVyIGdlbmVyYXRpb24gb2YgdmFyaW91cyBvYmplY3QgdHlwZXMuIiwKKyAg
ICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCisgICAg
ICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRh
dGFiYXNlIGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24i
OiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwg
InR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQorICAgICAg
ICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3JM
aXN0IiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6
IHsgIiRyZWYiOiAiRXJyb3IiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
ImlkIjogIk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9i
amVjdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAi
aXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9u
YWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6
ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiZXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yTGlzdCIsICIkcmVmIjogIkVy
cm9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUGFyYW1ldGVyQnVuZGxlIiwKKyAgICAgICAg
ICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRl
bXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
bm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0
aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
ZXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVy
cm9yTGlzdCIsICIkcmVmIjogIkVycm9yTGlzdCIgfQorICAgICAgICAgICAgXQorICAgICAgICB9
LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNv
bmZsaWN0cyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ29uZmxpY3RlZCBuYW1lcyBt
YXkgY2F1c2UgZ2VuZXJhdGVkIGdldHRlcnMvc2V0dGVycyB0byBjbGFzaCB3aXRoIGJ1aWx0LWlu
IEluc3BlY3Rvck9iamVjdCBtZXRob2RzLiIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3Qi
LAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJpbnRlZ2VyIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiYXJyYXkiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJzdHJpbmciLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ2YWx1ZSIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
Im9iamVjdCIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRHVtbXlPYmplY3QiLAorICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkFuIG9wZW4gb2JqZWN0IHRoYXQgZG9lc24ndCBoYXZlIGFueSBwcmVk
ZWZpbmVkIGZpZWxkcy4iLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IgorICAgICAgICB9
CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIlRlc3QiLAorICAgICJkZXNjcmlwdGlvbiI6
ICJUZXN0IHRoZSBnZW5lcmF0aW9uIG9mIHNwZWNpYWwgYmVoYXZpb3JzIHRoYXQgb25seSBhcHBs
eSB0byBzcGVjaWZpYyBjbGFzc2VzLiIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiUGFyYW1ldGVyQnVuZGxlIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9i
amVjdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjog
InN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6
ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlw
ZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlw
ZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5
cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3IiLCAiJHJlZiI6
ICJEYXRhYmFzZS5FcnJvciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQor
XQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1yZXF1aXJp
bmctcnVudGltZS1jYXN0cy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgzZDk0YmU4OTdkMjJjYzA1OGJiNjQ2
ZmVjZDlhNDczMDM3YjZiOTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLXJlcXVpcmluZy1ydW50aW1l
LWNhc3RzLmpzb24KQEAgLTAsMCArMSw1MSBAQAorWworeworICAgICJkb21haW4iOiAiVGVzdCIs
CisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVHlwZU5lZWRp
bmdDYXN0IiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiQSBkdW1teSB0eXBlIHRoYXQgcmVxdWlyZXMgcnVudGltZSBjYXN0cywgYW5k
IGZvcmNlcyBub24tcHJpbWl0aXZlIHJlZmVyZW5jZWQgdHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRp
bWUgY2FzdCBoZWxwZXJzLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInN0cmluZyIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlv
biI6ICJTdHJpbmcgbWVtYmVyLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm51bWJl
ciIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG1lbWJlci4iIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbmltYWxzIiwgIiRyZWYiOiAiQ2FzdGVkQW5p
bWFscyIsICJkZXNjcmlwdGlvbiI6ICJFbnVtIG1lbWJlci4iIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJpZCIsICIkcmVmIjogIkNhc3RlZE9iamVjdElkIiwgImRlc2NyaXB0aW9uIjog
IkFsaWFzZWQgbWVtYmVyLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRyZWUiLCAi
JHJlZiI6ICJSZWN1cnNpdmVPYmplY3QxIiwgImRlc2NyaXB0aW9uIjogIlJlY3Vyc2l2ZSBvYmpl
Y3QgbWVtYmVyLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiQ2FzdGVkT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50
ZWdlciIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlVuY2FzdGVk
T2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIlVuY2FzdGVkQW5pbWFscyIsCisgICAgICAgICAg
ICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbIlBpZ3MiLCAiQ293cyIs
ICJDYXRzIiwgIkhlbnMiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQi
OiAiQ2FzdGVkQW5pbWFscyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAg
ICAgICAgImVudW0iOiBbIkR1Y2tzIiwgIkhlbnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29zIl0KKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlY3Vyc2l2ZU9iamVjdDEi
LAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVz
IjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib2JqIiwgIiRyZWYiOiAiUmVjdXJzaXZl
T2JqZWN0MiIsICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVjdXJzaXZlT2JqZWN0MiIsCisgICAgICAg
ICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJvYmoiLCAiJHJlZiI6ICJSZWN1cnNpdmVPYmplY3QxIiwg
Im9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9Citd
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFp
bi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmY0ZGZmNWNjYzI5ZDBlOGMx
ZmE0YjJkZDMyODNlNzcxNjMyYzdkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEs
MjIgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVzIjog
WwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAg
ICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlx
dWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAgXQotfSwKLXsKLSAgICAiZG9t
YWluIjogIlJ1bnRpbWUyIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAot
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCi0g
ICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2hhZG93
ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDIwYTBjMTU1Mjc1MGY2MjgyODhjZmY0MTkzOTZiZDZmNmFmNzQ5ZmUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5q
c29uCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiUnVu
dGltZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiS2V5
UGF0aCIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIktleSBwYXRoLiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICJuYW1lIjogInR5cGUiLAotICAgICAg
ICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgICAgICAgICAiZW51
bSI6IFsibnVsbCIsICJzdHJpbmciLCAiYXJyYXkiXSwKLSAgICAgICAgICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIktleSBwYXRoIHR5cGUuIgotICAgICAgICAgICAgICAgIH0sCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJzdHJpbmciLAotICAgICAg
ICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgICAgICAgICAib3B0
aW9uYWwiOiB0cnVlLAotICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU3RyaW5n
IHZhbHVlLiIKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgIm5hbWUiOiAiYXJyYXkiLAotICAgICAgICAgICAgICAgICAgICAidHlwZSI6
ICJhcnJheSIsCi0gICAgICAgICAgICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAg
ICAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiQXJyYXkgdmFsdWUuIgotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFs
aWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUu
anNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JjOWQ1Mzk0NzhkYjQ5NWM5NjA2
N2VjZDU0YTk1YmU1MmY4ZDA3MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
dHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKysrIC9kZXYvbnVs
bApAQCAtMSwxMCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAgICAidHlw
ZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCi0g
ICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUt
ZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmIwOGJkOTQwYjY0ZmI2NjAzOTY1Y2UxYjA0ZDNm
Yzk3NDllYTkwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xh
cmF0aW9uLWFycmF5LXR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLVsK
LXsKLSAgICAiZG9tYWluIjogIkRlYnVnZ2VyIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsK
LSAgICAgICAgICAgICJpZCI6ICJCcmVha3BvaW50SWQiLAotICAgICAgICAgICAgInR5cGUiOiAi
aW50ZWdlciIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlYXNv
biIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBb
IkRpZWQiLCAiRmFpbnRlZCIsICJIdW5ncnkiXQotICAgICAgICB9Ci0gICAgXQotfSwKLXsKLSAg
ICAiZG9tYWluIjogIlJ1bnRpbWUiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAg
ICAgICAgImlkIjogIk9iamVjdElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCi0g
ICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJMdWNreU51bWJlcnMiLAot
ICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgIml0ZW1zIjogeyAidHlw
ZSI6ICJpbnRlZ2VyIiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6
ICJCYWJ5TmFtZXMiLAotICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAg
Iml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAg
ICAgICAgICAgImlkIjogIk5ld09iamVjdHMiLAotICAgICAgICAgICAgInR5cGUiOiAiYXJyYXki
LAotICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJPYmplY3RJZCIgfQotICAgICAgICB9
LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiT2xkT2JqZWN0cyIsCi0gICAgICAgICAg
ICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIkRlYnVn
Z2VyLkJyZWFrcG9pbnRJZCIgfQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAi
aWQiOiAiU3RvcFJlYXNvbnMiLAotICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAgICAg
ICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJEZWJ1Z2dlci5SZWFzb24iIH0KLSAgICAgICAgfQot
ICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tZW51
bS10eXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmMGFlZTljOTFiOTVh
YmFmMzg3ZTcyYTkxYTMzMzhiNTc5ZGE5YWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAt
MSwxNSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAgICAidHlwZXMiOiBb
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJGYXJtQW5pbWFscyIsCi0gICAgICAgICAg
ICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBbIlBpZ3MiLCAiQ293cyIs
ICJDYXRzIiwgIkhlbnMiXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQi
OiAiVHdvTGVnZ2VkQW5pbWFscyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAg
ICAgICAgICAgImVudW0iOiBbIkR1Y2tzIiwgIkhlbnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29zIl0K
LSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
NzgzMDkxOTczYmNmMzc1NDVjZDc1OTYwOTE4NjdmOGNhMjVkODVhLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKysr
IC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFz
ZSIsCi0gICAgImRlc2NyaXB0aW9uIjogIlRlc3QgdHlwZSBidWlsZGVyIGdlbmVyYXRpb24gb2Yg
dmFyaW91cyBvYmplY3QgdHlwZXMuIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJpZCI6ICJFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCi0gICAgICAgICAgICAi
cHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlw
ZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlv
biI6ICJFcnJvciBjb2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7
Ci0gICAgICAgICAgICAiaWQiOiAiRXJyb3JMaXN0IiwKLSAgICAgICAgICAgICJ0eXBlIjogImFy
cmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiRXJyb3IiIH0KLSAgICAgICAg
fSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
IiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGll
cyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAi
YXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAi
LCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3IiLCAiJHJl
ZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImVycm9yTGlzdCIsICIkcmVmIjogIkVycm9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUgfQot
ICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAi
UGFyYW1ldGVyQnVuZGxlIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAg
ICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5h
bWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yTGlzdCIsICIkcmVmIjogIkVycm9yTGlzdCIg
fQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQi
OiAiT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyIsCi0gICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiQ29uZmxpY3RlZCBuYW1lcyBtYXkgY2F1c2UgZ2VuZXJhdGVkIGdldHRlcnMvc2V0
dGVycyB0byBjbGFzaCB3aXRoIGJ1aWx0LWluIEluc3BlY3Rvck9iamVjdCBtZXRob2RzLiIsCi0g
ICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpbnRlZ2VyIiwgInR5cGUiOiAic3RyaW5nIiB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYXJyYXkiLCAidHlwZSI6ICJzdHJpbmciIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdHJpbmciLCAidHlwZSI6ICJzdHJpbmciIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZSIsICJ0eXBlIjogInN0cmluZyIgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm9iamVjdCIsICJ0eXBlIjogInN0cmluZyIgfQot
ICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAi
RHVtbXlPYmplY3QiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkFuIG9wZW4gb2JqZWN0
IHRoYXQgZG9lc24ndCBoYXZlIGFueSBwcmVkZWZpbmVkIGZpZWxkcy4iLAotICAgICAgICAgICAg
InR5cGUiOiAib2JqZWN0IgotICAgICAgICB9Ci0gICAgXQotfSwKLXsKLSAgICAiZG9tYWluIjog
IlRlc3QiLAotICAgICJkZXNjcmlwdGlvbiI6ICJUZXN0IHRoZSBnZW5lcmF0aW9uIG9mIHNwZWNp
YWwgYmVoYXZpb3JzIHRoYXQgb25seSBhcHBseSB0byBzcGVjaWZpYyBjbGFzc2VzLiIsCi0gICAg
InR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUGFyYW1ldGVyQnVuZGxl
IiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGll
cyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAi
YXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZXJyb3IiLCAiJHJlZiI6ICJEYXRhYmFzZS5FcnJvciIgfQotICAgICAgICAg
ICAgXQotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90
eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDgzZDk0YmU4OTdkMjJjYzA1OGJiNjQ2ZmVjZDlhNDczMDM3YjZiOTIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMu
anNvbgorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjog
IlRlc3QiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlR5
cGVOZWVkaW5nQ2FzdCIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIkEgZHVtbXkgdHlwZSB0aGF0IHJlcXVpcmVzIHJ1bnRpbWUgY2Fz
dHMsIGFuZCBmb3JjZXMgbm9uLXByaW1pdGl2ZSByZWZlcmVuY2VkIHR5cGVzIHRvIGFsc28gZW1p
dCBydW50aW1lIGNhc3QgaGVscGVycy4iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdHJpbmciLCAidHlwZSI6ICJzdHJpbmciLCAiZGVz
Y3JpcHRpb24iOiAiU3RyaW5nIG1lbWJlci4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJudW1iZXIiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIk51bWJlciBtZW1i
ZXIuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYW5pbWFscyIsICIkcmVmIjogIkNh
c3RlZEFuaW1hbHMiLCAiZGVzY3JpcHRpb24iOiAiRW51bSBtZW1iZXIuIiB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiaWQiLCAiJHJlZiI6ICJDYXN0ZWRPYmplY3RJZCIsICJkZXNjcmlw
dGlvbiI6ICJBbGlhc2VkIG1lbWJlci4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0
cmVlIiwgIiRyZWYiOiAiUmVjdXJzaXZlT2JqZWN0MSIsICJkZXNjcmlwdGlvbiI6ICJSZWN1cnNp
dmUgb2JqZWN0IG1lbWJlci4iIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAg
ewotICAgICAgICAgICAgImlkIjogIkNhc3RlZE9iamVjdElkIiwKLSAgICAgICAgICAgICJ0eXBl
IjogImludGVnZXIiCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJV
bmNhc3RlZE9iamVjdElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCi0gICAgICAg
IH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJVbmNhc3RlZEFuaW1hbHMiLAotICAg
ICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJQaWdzIiwg
IkNvd3MiLCAiQ2F0cyIsICJIZW5zIl0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAg
ICAgImlkIjogIkNhc3RlZEFuaW1hbHMiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwK
LSAgICAgICAgICAgICJlbnVtIjogWyJEdWNrcyIsICJIZW5zIiwgIkNyb3dzIiwgIkZsYW1pbmdv
cyJdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZWN1cnNpdmVP
YmplY3QxIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJv
cGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm9iaiIsICIkcmVmIjogIlJl
Y3Vyc2l2ZU9iamVjdDIiLCAib3B0aW9uYWwiOiB0cnVlIH0KLSAgICAgICAgICAgIF0KLSAgICAg
ICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlY3Vyc2l2ZU9iamVjdDIiLAot
ICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjog
WwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib2JqIiwgIiRyZWYiOiAiUmVjdXJzaXZlT2Jq
ZWN0MSIsICJvcHRpb25hbCI6IHRydWUgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAg
XQotfQotXQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IDM4ZTVhZjViODUyZjI0MDE4MzM2MjMyNThiZTExOWFjNDExZWQwZDcuLjRlZTNjZDc5NDVk
NDk0NWMwNzI2MDI5Yzc0NjYyMzcxOGJlMTkyYjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxNi0xMi0yMSAgQnJp
YW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiB0ZWFj
aCB0aGUgcHJvdG9jb2wgZ2VuZXJhdG9yIGFib3V0IHBsYXRmb3JtLXNwZWNpZmljIHR5cGVzLCBl
dmVudHMsIGFuZCBjb21tYW5kcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY2MDAzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yODcxODk5MD4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZWFjaCBydW4t
aW5zcGVjdG9yLWdlbmVyYXRvci10ZXN0cyB0byBnZW5lcmF0ZSB0ZXN0IG91dHB1dCB1c2luZyB0
aGUgcGxhdGZvcm0gbmFtZQorICAgICAgICBkZXJpdmVkIGZyb20gdGhlIGRpcmVjdG9yeSB0aGF0
IHRoZSB0ZXN0IGlzIGluLiBGb3IgZXhhbXBsZSwgdGVzdHMgaW4gdGhlIC9nZW5lcmljLworICAg
ICAgICBzdWJkaXJlY3Rvcnkgd2lsbCBwYXNzIGAtLXBsYXRmb3JtIGdlbmVyaWNgIHRvIGdlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weS4KKworICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvaW5zcGVjdG9yL21haW4ucHk6CisgICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JU
ZXN0cy5nZW5lcmF0ZV9mcm9tX2pzb24pOgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVz
dHMucnVuX3Rlc3RzKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLm1haW4pOgor
CiAyMDE2LTEyLTIxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAg
IFdlYkFzc2VtYmx5OiBJbXBvcnQgc3BlYyB0ZXN0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5z
cGVjdG9yL21haW4ucHkKaW5kZXggMjI0NGQ0Yzc4MmNhZTdkYWFhZjI2NzdjMDRlMjM2Yzc4Zjk4
ZDE0ZS4uYThmY2YyYTQxODQwNzIzNWZjYTQwMjQ0YmZmNDUyYTBhZDY0NGRjNyAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9tYWluLnB5CkBAIC0zOCwxMyArMzgsMTQgQEAgY2xh
c3MgSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHM6CiAgICAgICAgIHNlbGYucmVzZXRfcmVzdWx0cyA9
IHJlc2V0X3Jlc3VsdHMKICAgICAgICAgc2VsZi5leGVjdXRpdmUgPSBleGVjdXRpdmUKIAotICAg
IGRlZiBnZW5lcmF0ZV9mcm9tX2pzb24oc2VsZiwganNvbl9maWxlLCBvdXRwdXRfZGlyZWN0b3J5
KToKKyAgICBkZWYgZ2VuZXJhdGVfZnJvbV9qc29uKHNlbGYsIGpzb25fZmlsZSwgcGxhdGZvcm0s
IG91dHB1dF9kaXJlY3RvcnkpOgogICAgICAgICBjbWQgPSBbJ3B5dGhvbicsCiAgICAgICAgICAg
ICAgICAnSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5JywKICAgICAgICAgICAgICAgICctLW91dHB1dERpcicsIG91
dHB1dF9kaXJlY3RvcnksCiAgICAgICAgICAgICAgICAnLS1mb3JjZScsCiAgICAgICAgICAgICAg
ICAnLS1mcmFtZXdvcmsnLCAnVGVzdCcsCiAgICAgICAgICAgICAgICAnLS10ZXN0JywKKyAgICAg
ICAgICAgICAgICctLXBsYXRmb3JtJywgcGxhdGZvcm0sCiAgICAgICAgICAgICAgICBqc29uX2Zp
bGVdCiAKICAgICAgICAgZXhpdF9jb2RlID0gMApAQCAtODcsNyArODgsNyBAQCBjbGFzcyBJbnNw
ZWN0b3JHZW5lcmF0b3JUZXN0czoKICAgICAgICAgICAgICAgICBwcmludCAnUEFTUzogJXMnICUg
b3V0cHV0X2ZpbGUKICAgICAgICAgcmV0dXJuIGNoYW5nZXNfZm91bmQKIAotICAgIGRlZiBydW5f
dGVzdHMoc2VsZiwgaW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5KToKKyAgICBk
ZWYgcnVuX3Rlc3RzKHNlbGYsIHBsYXRmb3JtLCBpbnB1dF9kaXJlY3RvcnksIHJlZmVyZW5jZV9k
aXJlY3RvcnkpOgogICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHJlZmVyZW5jZV9kaXJlY3RvcnkK
IAogICAgICAgICBwYXNzZWQgPSBUcnVlCkBAIC0xMDAsNyArMTAxLDcgQEAgY2xhc3MgSW5zcGVj
dG9yR2VuZXJhdG9yVGVzdHM6CiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5yZXNldF9yZXN1bHRz
OgogICAgICAgICAgICAgICAgIHdvcmtfZGlyZWN0b3J5ID0gdGVtcGZpbGUubWtkdGVtcCgpCiAK
LSAgICAgICAgICAgIGlmIHNlbGYuZ2VuZXJhdGVfZnJvbV9qc29uKG9zLnBhdGguam9pbihpbnB1
dF9kaXJlY3RvcnksIGlucHV0X2ZpbGUpLCB3b3JrX2RpcmVjdG9yeSk6CisgICAgICAgICAgICBp
ZiBzZWxmLmdlbmVyYXRlX2Zyb21fanNvbihvcy5wYXRoLmpvaW4oaW5wdXRfZGlyZWN0b3J5LCBp
bnB1dF9maWxlKSwgcGxhdGZvcm0sIHdvcmtfZGlyZWN0b3J5KToKICAgICAgICAgICAgICAgICBw
YXNzZWQgPSBGYWxzZQogCiAgICAgICAgICAgICBpZiBzZWxmLnJlc2V0X3Jlc3VsdHM6CkBAIC0x
MjAsMTAgKzEyMSwyMiBAQCBjbGFzcyBJbnNwZWN0b3JHZW5lcmF0b3JUZXN0czoKIAogICAgICAg
ICBhbGxfdGVzdHNfcGFzc2VkID0gVHJ1ZQogCi0gICAgICAgIGlucHV0X2RpcmVjdG9yeSA9IG9z
LnBhdGguam9pbignSmF2YVNjcmlwdENvcmUnLCAnaW5zcGVjdG9yJywgJ3NjcmlwdHMnLCAndGVz
dHMnKQotICAgICAgICByZWZlcmVuY2VfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKCdKYXZhU2Ny
aXB0Q29yZScsICdpbnNwZWN0b3InLCAnc2NyaXB0cycsICd0ZXN0cycsICdleHBlY3RlZCcpCi0g
ICAgICAgIGlmIG5vdCBzZWxmLnJ1bl90ZXN0cyhpbnB1dF9kaXJlY3RvcnksIHJlZmVyZW5jZV9k
aXJlY3RvcnkpOgotICAgICAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IEZhbHNlCisgICAgICAg
IGJhc2VfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKCdKYXZhU2NyaXB0Q29yZScsICdpbnNwZWN0
b3InLCAnc2NyaXB0cycsICd0ZXN0cycpCisKKyAgICAgICAgcGxhdGZvcm1fZGlyZWN0b3JpZXMg
PSB7CisgICAgICAgICAgICAnbWFjb3MnOiAnbWFjJywKKyAgICAgICAgICAgICdpb3MnOiAnaW9z
JywKKyAgICAgICAgICAgICdnZW5lcmljJzogJ2dlbmVyaWMnLAorICAgICAgICAgICAgJ2FsbCc6
ICdhbGwnLAorICAgICAgICB9CisKKyAgICAgICAgZm9yIHBsYXRmb3JtX25hbWUsIHBsYXRmb3Jt
X2RpcmVjdG9yeSBpbiBwbGF0Zm9ybV9kaXJlY3Rvcmllcy5pdGVyaXRlbXMoKToKKyAgICAgICAg
ICAgIGlucHV0X2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbihiYXNlX2RpcmVjdG9yeSwgcGxhdGZv
cm1fZGlyZWN0b3J5KQorICAgICAgICAgICAgcmVmZXJlbmNlX2RpcmVjdG9yeSA9IG9zLnBhdGgu
am9pbihpbnB1dF9kaXJlY3RvcnksICdleHBlY3RlZCcpCisgICAgICAgICAgICBpZiBub3Qgb3Mu
cGF0aC5pc2RpcihpbnB1dF9kaXJlY3RvcnkpIG9yIG5vdCBvcy5wYXRoLmlzZGlyKGlucHV0X2Rp
cmVjdG9yeSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgYWxsX3Rl
c3RzX3Bhc3NlZCA9IGFsbF90ZXN0c19wYXNzZWQgYW5kIHNlbGYucnVuX3Rlc3RzKHBsYXRmb3Jt
X25hbWUsIGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSkKIAogICAgICAgICBw
cmludCAnJwogICAgICAgICBpZiBhbGxfdGVzdHNfcGFzc2VkOgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297638</attachid>
            <date>2016-12-21 17:21:20 -0800</date>
            <delta_ts>2016-12-21 17:21:20 -0800</delta_ts>
            <desc>[PATCH 3/3] Parser/model/generator changes, and tests</desc>
            <filename>bug-166003-20161221172016.patch</filename>
            <type>text/plain</type>
            <size>356555</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwMDkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
MTlmYmE5ZTUyMjEwNTcyZTc2YjZiMzYwNTA1NGQyMzBiZDI5NTMyLi42MDcwYWZkODRlYjlhNTdi
NzA5MTIzMmQ3NjA4OGI2MjRkNjU3M2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTYs
NiArNiwzNjkgQEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAg
ICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgcGFyc2VyLCBtb2RlbCwgYW5kIGdlbmVyYXRvci1z
aWRlIGNoYW5nZXMgdG8gYWNjb3VudCBmb3IKKyAgICAgICAgcGxhdGZvcm0tc3BlY2lmaWMgdHlw
ZXMsIGV2ZW50cywgYW5kIGNvbW1hbmRzLiBUaGUgJ3BsYXRmb3JtJyBwcm9wZXJ0eSBpcyBwYXJz
ZWQKKyAgICAgICAgZm9yIHRvcC1sZXZlbCBkZWZpbml0aW9ucyBhbmQgYXNzdW1lZCB0byBiZSB0
aGUgJ2dlbmVyaWMnIHBsYXRmb3JtIGlmIG5vbmUgaXMgc3BlY2lmaWVkLgorCisgICAgICAgIFNp
bmNlIHRoZSBnZW5lcmF0b3IncyBwbGF0Zm9ybSBzZXR0aW5nIGFjdHMgdG8gZmlsdGVyIGRlZmlu
aXRpb25zIHdpdGggYW4gaW5jb21wYXRpYmxlIHBsYXRmb3JtLAorICAgICAgICBhbGwgZ2VuZXJh
dG9ycyBtdXN0IGJlIG1vZGlmaWVkIHRvIGNvbnN1bHQgYSBsaXN0IG9mIGZpbHRlcmVkIHR5cGVz
L2NvbW1hbmRzL2V2ZW50cyBmb3IKKyAgICAgICAgYSBkb21haW4gaW5zdGVhZCBvZiBkaXJlY3Rs
eSBhY2Nlc3NpbmcgRG9tYWluLnt0eXBlX2RlY2xhcmF0aW9ucywgY29tbWFuZHMsIGV2ZW50c30u
IFRvIHByZXZlbnQKKyAgICAgICAgYWNjaWRlbnRhbCBtaXN1c2UsIGhpZGUgdGhvc2UgZmllbGRz
IGJlaGluZCBhY2Nlc3NvcnMgKGUuZy4sIGBhbGxfdHlwZV9kZWNsYXJhdGlvbnMoKWApIHNvIHRo
YXQgdGhleQorICAgICAgICBhcmUgc3RpbGwgYWNjZXNzaWJsZSBpZiB0cnVseSBuZWNlc3Nhcnks
IGJ1dCBub3QgdXNlZCBieSBkZWZhdWx0IGFuZCBjYXVzZWQgYW4gZXJyb3IgaWYgbm90IG1pZ3Jh
dGVkLgorCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBf
YWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAgIChDcHBBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9k
ZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weToKKyAgICAgICAg
KENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUp
OgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRl
X2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAoQ3BwQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25z
X2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENw
cEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZG9tYWluc190b19nZW5l
cmF0ZSk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluKToKKyAg
ICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVy
YXRlX3NtYWxsX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4pOgor
ICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2Vu
ZXJhdGVfbGFyZ2VfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbik6
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAgIChDcHBGcm9udGVuZERpc3BhdGNoZXJI
ZWFkZXJHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAgICAgIChDcHBGcm9udGVu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRp
b25zX2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAg
IChDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5kb21haW5zX3Rv
X2dlbmVyYXRlKToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWlu
KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90
b2NvbF90eXBlc19oZWFkZXIucHk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyk6CisgICAgICAgIChfZ2VuZXJh
dGVfdHlwZWRlZnNfZm9yX2RvbWFpbik6CisgICAgICAgIChfZ2VuZXJhdGVfYnVpbGRlcnNfZm9y
X2RvbWFpbik6CisgICAgICAgIChfZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2Jp
bmRpbmdfdHJhaXRzKToKKyAgICAgICAgKF9nZW5lcmF0ZV9kZWNsYXJhdGlvbnNfZm9yX2VudW1f
Y29udmVyc2lvbl9tZXRob2RzKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAg
KENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZW51bV9j
b252ZXJzaW9uX21ldGhvZHNfZm9yX2RvbWFpbik6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVz
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX29wZW5fZmllbGRfbmFtZXMpOgorICAg
ICAgICAoQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9i
dWlsZGVyc19mb3JfZG9tYWluKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHk6CisgICAgICAgIChKU0JhY2tlbmRDb21t
YW5kc0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluKToKKyAgICAgICAgKEpTQmFja2Vu
ZENvbW1hbmRzR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoSlNCYWNr
ZW5kQ29tbWFuZHNHZW5lcmF0b3IuZ2VuZXJhdGVfZG9tYWluKToKKyAgICAgICAgKEpTQmFja2Vu
ZENvbW1hbmRzR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUuc2hvdWxkX2dlbmVyYXRlX2Rv
bWFpbik6IERlbGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAgIChPYmpDQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAg
ICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNf
Zm9yd2FyZF9kZWNsYXJhdGlvbnMpOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVh
ZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21h
aW4pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19i
YWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChPYmpDQmFja2Vu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChPYmpDQmFja2Vu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToK
KyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9n
ZW5lcmF0ZV9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4pOgorICAgICAgICAoT2Jq
Q0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAg
IChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKTogRGVs
ZXRlZC4KKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
b3V0cHV0X2ZpbGVuYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1w
bGVtZW50YXRpb25HZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmdlbmVyYXRlX291
dHB1dCk6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9u
R2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4pOiBE
ZWxldGVkLgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRv
ci5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZCk6IERlbGV0ZWQu
CisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5l
cmF0ZV9zdWNjZXNzX2Jsb2NrX2Zvcl9jb21tYW5kKTogRGVsZXRlZC4KKyAgICAgICAgKE9iakND
b25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX3N1Y2Nlc3NfYmxv
Y2tfZm9yX2NvbW1hbmQuYW5kKTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9u
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2NvbnZlcnNpb25zX2Zvcl9jb21tYW5k
KTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5l
cmF0b3IuX2dlbmVyYXRlX2NvbnZlcnNpb25zX2Zvcl9jb21tYW5kLmluX3BhcmFtX2V4cHJlc3Np
b24pOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdl
bmVyYXRvci5fZ2VuZXJhdGVfaW52b2NhdGlvbl9mb3JfY29tbWFuZCk6IERlbGV0ZWQuCisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRp
b25faGVhZGVyLnB5OgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25IZWFkZXJHZW5lcmF0b3Iu
Z2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSGVhZGVyR2VuZXJh
dG9yLl9nZW5lcmF0ZV9wcm9wZXJ0aWVzX2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0
aW9uLnB5OgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRv
cik6CisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmdl
bmVyYXRlX291dHB1dCk6CisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9u
R2VuZXJhdG9yLl9nZW5lcmF0ZV9jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21h
aW5zKToKKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
X2dlbmVyYXRlX2l2YXJzKToKKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRp
b25HZW5lcmF0b3IuX2dlbmVyYXRlX2RlYWxsb2MpOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0Jh
Y2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX19pbml0X18pOiBEZWxldGVk
LgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
b3V0cHV0X2ZpbGVuYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6IERlbGV0ZWQuCisgICAg
ICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJh
dGVfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWlucyk6IERlbGV0ZWQuCisg
ICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2Vu
ZXJhdGVfaXZhcnMpOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2RlYWxsb2MpOiBEZWxldGVkLgorICAgICAg
ICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRl
X2hhbmRsZXJfc2V0dGVyX2Zvcl9kb21haW4pOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0JhY2tl
bmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2V2ZW50X2Rpc3Bh
dGNoZXJfZ2V0dGVyX2Zvcl9kb21haW4pOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0JhY2tlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX3ZhcmlhYmxlX25hbWVfcHJlZml4X2Zv
cl9kb21haW4pOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAg
ICAgICAoT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmRvbWFp
bnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
cyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hl
YWRlci5weToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToK
KyAgICAgICAgKE9iakNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRp
b25zKToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2VudW1zKToKKyAg
ICAgICAgKE9iakNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX3R5cGVzKToKKyAgICAgICAgKE9i
akNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2NvbW1hbmRfcHJvdG9jb2xzKToKKyAgICAgICAg
KE9iakNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2V2ZW50X2ludGVyZmFjZXMpOgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19pbnRlcm5hbF9oZWFk
ZXIucHk6CisgICAgICAgIChPYmpDSW50ZXJuYWxIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0
cHV0KToKKyAgICAgICAgKE9iakNJbnRlcm5hbEhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZXZl
bnRfZGlzcGF0Y2hlcl9wcml2YXRlX2ludGVyZmFjZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hl
YWRlci5weToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0hlYWRlckdlbmVy
YXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVDb252
ZXJzaW9uc0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX2Z1bmN0aW9u
cyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3By
b3RvY29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChPYmpD
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5kb21haW5zX3Rv
X2dlbmVyYXRlKToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0ltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV90eXBlX2ZhY3RvcnlfY2F0ZWdvcnlfaW50ZXJmYWNl
KToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV90eXBlX2ZhY3RvcnlfY2F0ZWdvcnlfaW1wbGVtZW50YXRpb24pOgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2Nv
bF90eXBlc19pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVzSW1w
bGVtZW50YXRpb25HZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAgICAgIChPYmpD
UHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfaW1wbGVt
ZW50YXRpb25zKToKKworICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dG9yLnB5OgorICAgICAgICAoR2VuZXJhdG9yLmNhbl9nZW5lcmF0ZV9wbGF0Zm9ybSk6CisgICAg
ICAgIChHZW5lcmF0b3IpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfZGVjbGFyYXRpb25zX2Zv
cl9kb21haW4pOgorICAgICAgICAoR2VuZXJhdG9yLmNvbW1hbmRzX2Zvcl9kb21haW4pOgorICAg
ICAgICAoR2VuZXJhdG9yLmV2ZW50c19mb3JfZG9tYWluKToKKyAgICAgICAgVGhlc2UgYXJlIHRo
ZSBjb3JlIG1ldGhvZHMgZm9yIGNvbXB1dGluZyB3aGV0aGVyIGEgZGVmaW5pdGlvbiBjYW4gYmUg
dXNlZCBnaXZlbiBhIHRhcmdldCBwbGF0Zm9ybS4KKworICAgICAgICAoR2VuZXJhdG9yLmNhbGN1
bGF0ZV90eXBlc19yZXF1aXJpbmdfc2hhcGVfYXNzZXJ0aW9ucyk6CisgICAgICAgIChHZW5lcmF0
b3IuX3RyYXZlcnNlX2FuZF9hc3NpZ25fZW51bV92YWx1ZXMpOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5OgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfdHlw
ZV9kZWNsYXJhdGlvbik6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV9jb21tYW5kKToKKyAgICAg
ICAgKFByb3RvY29sLnBhcnNlX2V2ZW50KToKKyAgICAgICAgKFByb3RvY29sLnJlc29sdmVfdHlw
ZXMpOgorCisgICAgICAgIChEb21haW4uX19pbml0X18pOgorICAgICAgICAoRG9tYWluKToKKyAg
ICAgICAgKERvbWFpbi5hbGxfdHlwZV9kZWNsYXJhdGlvbnMpOgorICAgICAgICAoRG9tYWluLmFs
bF9jb21tYW5kcyk6CisgICAgICAgIChEb21haW4uYWxsX2V2ZW50cyk6CisgICAgICAgIEhpZGUg
ZmllbGRzIGJlaGluZCB0aGVzZSBhY2Nlc3NvcnMgc28gaXQncyByZWFsbHkgb2J2aW91cyB3aGVu
IHdlIGFyZSBpZ25vcmluZyBwbGF0Zm9ybSBmaWx0ZXJpbmcuCisKKyAgICAgICAgKERvbWFpbi5y
ZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyk6CisgICAgICAgIChUeXBlRGVjbGFyYXRpb24uX19pbml0
X18pOgorICAgICAgICAoQ29tbWFuZC5fX2luaXRfXyk6CisgICAgICAgIChFdmVudC5fX2luaXRf
Xyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvci5w
eToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX3R5cGVzX2Zvcl9kb21h
aW4pOgorICAgICAgICAoT2JqQ0dlbmVyYXRvcik6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLnNo
b3VsZF9nZW5lcmF0ZV9jb21tYW5kc19mb3JfZG9tYWluKToKKyAgICAgICAgKE9iakNHZW5lcmF0
b3Iuc2hvdWxkX2dlbmVyYXRlX2V2ZW50c19mb3JfZG9tYWluKToKKyAgICAgICAgKE9iakNHZW5l
cmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl90eXBlc19maWx0ZXIpOiBEZWxldGVkLgorICAg
ICAgICAoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVzX2ZpbHRlci5z
aG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVzKTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNHZW5l
cmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9jb21t
YW5kX2hhbmRsZXJfZmlsdGVyLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVy
KTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFp
bl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRlcik6IERlbGV0ZWQuCisgICAgICAgIChPYmpDR2VuZXJh
dG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIuc2hvdWxk
X2dlbmVyYXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyKTogRGVsZXRlZC4KKyAgICAgICAgQ2xl
YW4gdXAgc29tZSBtZXNzeSBjb2RlIHRoYXQgZXNzZW50aWFsbHkgZGlkIHRoZSBzYW1lIGRlZmlu
aXRpb24gZmlsdGVyaW5nIGFzIHdlIG11c3QgZG8gZm9yIHBsYXRmb3Jtcy4KKyAgICAgICAgVGhp
cyB3aWxsIGJlIGVuaGFuY2VkIGluIGEgZnV0dXJlIHBhdGNoIHNvIHRoYXQgcGxhdGZvcm0gZmls
dGVyaW5nIHdpbGwgdGFrZSBwcmlvcml0eSBvdmVyIHRoZSB0YXJnZXQgZnJhbWV3b3JrLgorCisg
ICAgICAgIFRoZSByZXN1bHRzIGFib3ZlIG5lZWQgcmViYXNlbGluaW5nIGJlY2F1c2UgdGhlIGNs
YXNzIG5hbWVzIGZvciB0d28gZ2VuZXJhdG9ycyB3ZXJlIHN3YXBwZWQgYnkgYWNjaWRlbnQuCisg
ICAgICAgIEZpeGluZyB0aGUgbmFtZXMgY2F1c2VzIHRoZSBvcmRlciBvZiBnZW5lcmF0ZWQgZmls
ZXMgdG8gY2hhbmdlLCBhbmQgdGhpcyBnZW5lcmF0ZXMgdWdseSBkaWZmcyBiZWNhdXNlIGV2ZXJ5
CisgICAgICAgIGdlbmVyYXRlZCBmaWxlIGluY2x1ZGVzIHRoZSBzYW1lIGNvcHlyaWdodCBibG9j
ayBhdCB0aGUgdG9wLgorCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdDoKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRz
LXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdDoKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbnMtd2l0
aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdDoK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2V2ZW50
cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgt
ZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29u
LXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdDoKKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRp
b24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXkt
dHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0OgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMu
anNvbi1yZXN1bHQ6CisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbi1lcnJv
cjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24tZXJyb3I6IEFkZGVk
LgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21t
YW5kLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS13aXRoLWludmFsaWQtcGxhdGZv
cm0uanNvbjogQWRkZWQuCisKKyAgICAgICAgQWRkIGVycm9yIHRlc3QgY2FzZXMgZm9yIGludmFs
aWQgcGxhdGZvcm1zIGluIGNvbW1hbmRzLCB0eXBlcywgYW5kIGV2ZW50cy4KKworICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdDog
QWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxsL2RlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2FsbC9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29u
LXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvaW9zL2Rl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2lvcy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uLXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvbWFjL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb246IEFkZGVkLgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL21hYy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRo
LW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdDogQWRkZWQuCisKKyAgICAgICAgQWRkIGEgYmFzaWMg
NC13YXkgdGVzdCB0aGF0IGdlbmVyYXRlcyBjb2RlIGZvciBlYWNoIHBsYXRmb3JtIGZyb20gdGhl
IHNhbWUgc3BlY2lmaWNhdGlvbi4KKyAgICAgICAgV2l0aCAnbWFjb3MnIHBsYXRmb3JtIGZvciBl
YWNoIGRlZmluaXRpb24sIG9ubHkgJ2FsbCcgYW5kICdtYWMnIGdlbmVyYXRlIGFueXRoaW5nIGlu
dGVyZXN0aW5nLgorCisyMDE2LTEyLTIxICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgor
CisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHRlYWNoIHRoZSBwcm90b2NvbCBnZW5lcmF0b3IgYWJv
dXQgcGxhdGZvcm0tc3BlY2lmaWMgdHlwZXMsIGV2ZW50cywgYW5kIGNvbW1hbmRzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYwMDMKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI4NzE4OTkwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBwYXJzZXIsIG1vZGVsLCBh
bmQgZ2VuZXJhdG9yLXNpZGUgY2hhbmdlcyB0byBhY2NvdW50IGZvcgorICAgICAgICBwbGF0Zm9y
bS1zcGVjaWZpYyB0eXBlcywgZXZlbnRzLCBhbmQgY29tbWFuZHMuIFRoZSAncGxhdGZvcm0nIHBy
b3BlcnR5IGlzIHBhcnNlZAorICAgICAgICBmb3IgdG9wLWxldmVsIGRlZmluaXRpb25zIGFuZCBh
c3N1bWVkIHRvIGJlIHRoZSAnZ2VuZXJpYycgcGxhdGZvcm0gaWYgbm9uZSBpcyBzcGVjaWZpZWQu
CisKKyAgICAgICAgU2luY2UgdGhlIGdlbmVyYXRvcidzIHBsYXRmb3JtIHNldHRpbmcgYWN0cyB0
byBmaWx0ZXIgZGVmaW5pdGlvbnMgd2l0aCBhbiBpbmNvbXBhdGlibGUgcGxhdGZvcm0sCisgICAg
ICAgIGFsbCBnZW5lcmF0b3JzIG11c3QgYmUgbW9kaWZpZWQgdG8gY29uc3VsdCBhIGxpc3Qgb2Yg
ZmlsdGVyZWQgdHlwZXMvY29tbWFuZHMvZXZlbnRzIGZvcgorICAgICAgICBhIGRvbWFpbiBpbnN0
ZWFkIG9mIGRpcmVjdGx5IGFjY2Vzc2luZyBEb21haW4ue3R5cGVfZGVjbGFyYXRpb25zLCBjb21t
YW5kcywgZXZlbnRzfS4gVG8gcHJldmVudAorICAgICAgICBhY2NpZGVudGFsIG1pc3VzZSwgaGlk
ZSB0aG9zZSBmaWVsZHMgYmVoaW5kIGFjY2Vzc29ycyAoZS5nLiwgYGFsbF90eXBlX2RlY2xhcmF0
aW9ucygpYCkgc28gdGhhdCB0aGV5CisgICAgICAgIGFyZSBzdGlsbCBhY2Nlc3NpYmxlIGlmIHRy
dWx5IG5lY2Vzc2FyeSwgYnV0IG5vdCB1c2VkIGJ5IGRlZmF1bHQgYW5kIGNhdXNlZCBhbiBlcnJv
ciBpZiBub3QgbWlncmF0ZWQuCisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weToKKyAg
ICAgICAgKENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5l
cmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5OgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZG9tYWlu
c190b19nZW5lcmF0ZSk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVy
YXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAg
IChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hl
cl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5
OgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5k
b21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zv
cl9kb21haW4pOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvci5fZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25f
Zm9yX2RvbWFpbik6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yLl9nZW5lcmF0ZV9sYXJnZV9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlv
bl9mb3JfZG9tYWluKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weToKKyAgICAgICAgKENwcEZyb250
ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAg
ICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0
Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b25zX2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weToKKyAgICAgICAgKENwcFByb3RvY29s
VHlwZXNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zKToKKyAg
ICAgICAgKF9nZW5lcmF0ZV90eXBlZGVmc19mb3JfZG9tYWluKToKKyAgICAgICAgKF9nZW5lcmF0
ZV9idWlsZGVyc19mb3JfZG9tYWluKToKKyAgICAgICAgKF9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xh
cmF0aW9uc19mb3JfYmluZGluZ190cmFpdHMpOgorICAgICAgICAoX2dlbmVyYXRlX2RlY2xhcmF0
aW9uc19mb3JfZW51bV9jb252ZXJzaW9uX21ldGhvZHMpOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9u
LnB5OgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9n
ZW5lcmF0ZV9lbnVtX2NvbnZlcnNpb25fbWV0aG9kc19mb3JfZG9tYWluKToKKyAgICAgICAgKENw
cFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfb3Blbl9maWVs
ZF9uYW1lcyk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5weToKKyAgICAgICAg
KEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW4pOgorICAg
ICAgICAoSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6Cisg
ICAgICAgIChKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvci5nZW5lcmF0ZV9kb21haW4pOgorICAg
ICAgICAoSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZS5zaG91
bGRfZ2VuZXJhdGVfZG9tYWluKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weToKKyAg
ICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5kb21haW5zX3RvX2dl
bmVyYXRlKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5f
Z2VuZXJhdGVfb2JqY19mb3J3YXJkX2RlY2xhcmF0aW9ucyk6CisgICAgICAgIChPYmpDQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJh
dGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAg
ICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKToKKyAgICAg
ICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmRvbWFpbnNf
dG9fZ2VuZXJhdGUpOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbik6
CisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yKTogRGVs
ZXRlZC4KKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
X19pbml0X18pOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRh
dGlvbkdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0Nv
bmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuZ2VuZXJhdGVfb3V0cHV0KTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9u
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfaW1wbGVtZW50YXRpb25f
Zm9yX2RvbWFpbik6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21t
YW5kKTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuX2dlbmVyYXRlX3N1Y2Nlc3NfYmxvY2tfZm9yX2NvbW1hbmQpOiBEZWxldGVkLgor
ICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJh
dGVfc3VjY2Vzc19ibG9ja19mb3JfY29tbWFuZC5hbmQpOiBEZWxldGVkLgorICAgICAgICAoT2Jq
Q0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfY29udmVyc2lv
bnNfZm9yX2NvbW1hbmQpOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQuaW5f
cGFyYW1fZXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9pbnZvY2F0aW9uX2Zvcl9jb21tYW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfY29uZmlndXJhdGlvbl9oZWFkZXIucHk6CisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkhl
YWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRp
b25IZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX3Byb3BlcnRpZXNfZm9yX2RvbWFpbik6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRp
b25faW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRp
b25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9u
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50
YXRpb25fZm9yX2RvbWFpbnMpOgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRh
dGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfaXZhcnMpOgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRp
b25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGVhbGxvYyk6CisgICAgICAgIChP
YmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcik6IERlbGV0ZWQuCisg
ICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2lu
aXRfXyk6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0Jh
Y2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KTog
RGVsZXRlZC4KKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW5z
KTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yLl9nZW5lcmF0ZV9pdmFycyk6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQmFja2Vu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGVhbGxvYyk6IERl
bGV0ZWQuCisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9zZXR0ZXJfZm9yX2RvbWFpbik6IERlbGV0ZWQuCisgICAg
ICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJh
dGVfZXZlbnRfZGlzcGF0Y2hlcl9nZXR0ZXJfZm9yX2RvbWFpbik6IERlbGV0ZWQuCisgICAgICAg
IChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fdmFyaWFibGVf
bmFtZV9wcmVmaXhfZm9yX2RvbWFpbik6IERlbGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHk6CisgICAgICAgIChPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAgICAgIChPYmpDRnJvbnRlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb25zKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX29iamNfaGVhZGVyLnB5OgorICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5nZW5l
cmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZm9y
d2FyZF9kZWNsYXJhdGlvbnMpOgorICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJh
dGVfZW51bXMpOgorICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfdHlwZXMp
OgorICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfY29tbWFuZF9wcm90b2Nv
bHMpOgorICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZXZlbnRfaW50ZXJm
YWNlcyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpj
X2ludGVybmFsX2hlYWRlci5weToKKyAgICAgICAgKE9iakNJbnRlcm5hbEhlYWRlckdlbmVyYXRv
ci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2JqQ0ludGVybmFsSGVhZGVyR2VuZXJhdG9y
Ll9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX3ByaXZhdGVfaW50ZXJmYWNlcyk6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVf
Y29udmVyc2lvbnNfaGVhZGVyLnB5OgorICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNp
b25zSGVhZGVyR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoT2JqQ1By
b3RvY29sVHlwZUNvbnZlcnNpb25zSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9lbnVtX2NvbnZl
cnNpb25fZnVuY3Rpb25zKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5weToK
KyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZUNvbnZl
cnNpb25zSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9jYXRl
Z29yeV9pbnRlcmZhY2UpOgorICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSW1w
bGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9jYXRlZ29yeV9pbXBs
ZW1lbnRhdGlvbik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ1By
b3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToK
KyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJh
dGVfdHlwZV9pbXBsZW1lbnRhdGlvbnMpOgorCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0b3IucHk6CisgICAgICAgIChHZW5lcmF0b3IuY2FuX2dlbmVyYXRlX3Bs
YXRmb3JtKToKKyAgICAgICAgKEdlbmVyYXRvcik6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9k
ZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgIChHZW5lcmF0b3IuY29tbWFuZHNfZm9y
X2RvbWFpbik6CisgICAgICAgIChHZW5lcmF0b3IuZXZlbnRzX2Zvcl9kb21haW4pOgorICAgICAg
ICBUaGVzZSBhcmUgdGhlIGNvcmUgbWV0aG9kcyBmb3IgY29tcHV0aW5nIHdoZXRoZXIgYSBkZWZp
bml0aW9uIGNhbiBiZSB1c2VkIGdpdmVuIGEgdGFyZ2V0IHBsYXRmb3JtLgorCisgICAgICAgIChH
ZW5lcmF0b3IuY2FsY3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3NlcnRpb25zKToKKyAg
ICAgICAgKEdlbmVyYXRvci5fdHJhdmVyc2VfYW5kX2Fzc2lnbl9lbnVtX3ZhbHVlcyk6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHk6CisgICAgICAgIChQcm90
b2NvbC5wYXJzZV90eXBlX2RlY2xhcmF0aW9uKToKKyAgICAgICAgKFByb3RvY29sLnBhcnNlX2Nv
bW1hbmQpOgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfZXZlbnQpOgorICAgICAgICAoUHJvdG9j
b2wucmVzb2x2ZV90eXBlcyk6CisKKyAgICAgICAgKERvbWFpbi5fX2luaXRfXyk6CisgICAgICAg
IChEb21haW4pOgorICAgICAgICAoRG9tYWluLmFsbF90eXBlX2RlY2xhcmF0aW9ucyk6CisgICAg
ICAgIChEb21haW4uYWxsX2NvbW1hbmRzKToKKyAgICAgICAgKERvbWFpbi5hbGxfZXZlbnRzKToK
KyAgICAgICAgSGlkZSBmaWVsZHMgYmVoaW5kIHRoZXNlIGFjY2Vzc29ycyBzbyBpdCdzIHJlYWxs
eSBvYnZpb3VzIHdoZW4gd2UgYXJlIGlnbm9yaW5nIHBsYXRmb3JtIGZpbHRlcmluZy4KKworICAg
ICAgICAoRG9tYWluLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKFR5cGVEZWNs
YXJhdGlvbi5fX2luaXRfXyk6CisgICAgICAgIChDb21tYW5kLl9faW5pdF9fKToKKyAgICAgICAg
KEV2ZW50Ll9faW5pdF9fKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29i
amNfZ2VuZXJhdG9yLnB5OgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVf
dHlwZXNfZm9yX2RvbWFpbik6CisgICAgICAgIChPYmpDR2VuZXJhdG9yKToKKyAgICAgICAgKE9i
akNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2NvbW1hbmRzX2Zvcl9kb21haW4pOgorICAgICAg
ICAoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZXZlbnRzX2Zvcl9kb21haW4pOgorICAg
ICAgICAoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVzX2ZpbHRlcik6
IERlbGV0ZWQuCisgICAgICAgIChPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5f
dHlwZXNfZmlsdGVyLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fdHlwZXMpOiBEZWxldGVkLgorICAg
ICAgICAoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1hbmRfaGFuZGxl
cl9maWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJh
dGVfZG9tYWluX2NvbW1hbmRfaGFuZGxlcl9maWx0ZXIuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9j
b21tYW5kX2hhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5zaG91bGRf
Z2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJfZmlsdGVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVy
X2ZpbHRlci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXIpOiBEZWxldGVk
LgorICAgICAgICBDbGVhbiB1cCBzb21lIG1lc3N5IGNvZGUgdGhhdCBlc3NlbnRpYWxseSBkaWQg
dGhlIHNhbWUgZGVmaW5pdGlvbiBmaWx0ZXJpbmcgYXMgd2UgbXVzdCBkbyBmb3IgcGxhdGZvcm1z
LgorICAgICAgICBUaGlzIHdpbGwgYmUgZW5oYW5jZWQgaW4gYSBmdXR1cmUgcGF0Y2ggc28gdGhh
dCBwbGF0Zm9ybSBmaWx0ZXJpbmcgd2lsbCB0YWtlIHByaW9yaXR5IG92ZXIgdGhlIHRhcmdldCBm
cmFtZXdvcmsuCisKKyAgICAgICAgVGhlIGZvbGxvd2luZyByZXN1bHRzIG5lZWQgcmViYXNlbGlu
aW5nIGJlY2F1c2UgdGhlIGNsYXNzIG5hbWVzIGZvciB0d28gZ2VuZXJhdG9ycyB3ZXJlIHN3YXBw
ZWQgYnkgYWNjaWRlbnQuCisgICAgICAgIEZpeGluZyB0aGUgbmFtZXMgY2F1c2VzIHRoZSBvcmRl
ciBvZiBnZW5lcmF0ZWQgZmlsZXMgdG8gY2hhbmdlLCBhbmQgdGhpcyBnZW5lcmF0ZXMgdWdseSBk
aWZmcyBiZWNhdXNlIGV2ZXJ5CisgICAgICAgIGdlbmVyYXRlZCBmaWxlIGluY2x1ZGVzIHRoZSBz
YW1lIGNvcHlyaWdodCBibG9jayBhdCB0aGUgdG9wLgorCisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0
ZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5q
c29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQ6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9lbnVtLXZh
bHVlcy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQ6
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9nZW5l
cmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQ6CisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlm
ZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29u
LXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdDoK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUt
ZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBl
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdDoKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVxdWly
aW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQ6CisKKzIwMTYtMTItMjEgIEJyaWFuIEJ1cmcg
IDxiYnVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogdGVhY2ggdGhlIHBy
b3RvY29sIGdlbmVyYXRvciBhYm91dCBwbGF0Zm9ybS1zcGVjaWZpYyB0eXBlcywgZXZlbnRzLCBh
bmQgY29tbWFuZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NjAwMworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjg3MTg5OTA+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgTWFrZSBpdCBwb3NzaWJsZSB0
byB0ZXN0IGluc3BlY3RvciBwcm90b2NvbCBnZW5lcmF0b3Igb3V0cHV0IGZvciBkaWZmZXJlbnQg
cGxhdGZvcm1zLgogCiAgICAgICAgIE1vdmUgZXhpc3RpbmcgdGVzdHMgdG8gdGhlIGdlbmVyaWMv
IHN1YmRpcmVjdG9yeSwgYXMgdGhleSBhcmUgdG8gYmUgZ2VuZXJhdGVkCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9j
cHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRl
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggM2FiMTYzMDE4NDNlZTA0MWM0NTI1
MDFhNDJiNmY3ODMyNGJhYWI3Mi4uODZlODY0OTc0NTM2ZmMwOTg2ZWYxZGU2MzUxMTUxZDA1N2Qy
NTBjZiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAt
NjMsMTEgKzYzLDEzIEBAIGNsYXNzIENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0
aW9ucykKIAogICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFp
bihzZWxmLCBkb21haW4pOgotICAgICAgICBpZiBub3QgZG9tYWluLmNvbW1hbmRzOgorICAgICAg
ICBjb21tYW5kcyA9IHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pCisKKyAgICAgICAg
aWYgbm90IGxlbihjb21tYW5kcyk6CiAgICAgICAgICAgICByZXR1cm4gJycKIAogICAgICAgICBj
b21tYW5kX2RlY2xhcmF0aW9ucyA9IFtdCi0gICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5j
b21tYW5kczoKKyAgICAgICAgZm9yIGNvbW1hbmQgaW4gY29tbWFuZHM6CiAgICAgICAgICAgICBj
b21tYW5kX2RlY2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJh
dGlvbl9mb3JfY29tbWFuZChjb21tYW5kKSkKIAogICAgICAgICBoYW5kbGVyX2FyZ3MgPSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4IGEzNTc5YWMzZWUwNmVhOTFkODVjZjU4NDliOWQ2
ZGRkMTBlMTE1NDEuLjk5MjYyMmJkZDc5MDJlODNhYzIzZTg3N2Q5MDE3YzFhNTE0NTY0Y2UgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNr
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC00Niw3ICs0Niw3IEBAIGNsYXNzIENwcEJhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIHJldHVy
biAiJXNCYWNrZW5kRGlzcGF0Y2hlcnMuaCIgJSBzZWxmLnByb3RvY29sX25hbWUoKQogCiAgICAg
ZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIobGFt
YmRhIGRvbWFpbjogbGVuKGRvbWFpbi5jb21tYW5kcykgPiAwLCBHZW5lcmF0b3IuZG9tYWluc190
b19nZW5lcmF0ZShzZWxmKSkKKyAgICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgZG9tYWluOiBs
ZW4oc2VsZi5jb21tYW5kc19mb3JfZG9tYWluKGRvbWFpbikpID4gMCwgR2VuZXJhdG9yLmRvbWFp
bnNfdG9fZ2VuZXJhdGUoc2VsZikpCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgog
ICAgICAgICBoZWFkZXJzID0gWwpAQCAtOTUsNyArOTUsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlz
cGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICB1c2VkX2VudW1f
bmFtZXMgPSBzZXQoKQogCiAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zID0gW10KLSAgICAg
ICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgorICAgICAgICBmb3IgY29tbWFuZCBp
biBzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgIGNvbW1hbmRf
ZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zv
cl9jb21tYW5kKGNvbW1hbmQsIHVzZWRfZW51bV9uYW1lcykpCiAKICAgICAgICAgaGFuZGxlcl9h
cmdzID0gewpAQCAtMTkyLDkgKzE5MiwxMCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgY2xhc3NDb21wb25lbnRz
LmFwcGVuZChleHBvcnRNYWNybykKIAogICAgICAgICBkZWNsYXJhdGlvbnMgPSBbXQotICAgICAg
ICBpZiBsZW4oZG9tYWluLmNvbW1hbmRzKSA+IDA6CisgICAgICAgIGNvbW1hbmRzID0gc2VsZi5j
b21tYW5kc19mb3JfZG9tYWluKGRvbWFpbikKKyAgICAgICAgaWYgbGVuKGNvbW1hbmRzKSA+IDA6
CiAgICAgICAgICAgICBkZWNsYXJhdGlvbnMuYXBwZW5kKCdwcml2YXRlOicpCi0gICAgICAgIGRl
Y2xhcmF0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRp
b25fZm9yX2NvbW1hbmQsIGRvbWFpbi5jb21tYW5kcykpCisgICAgICAgIGRlY2xhcmF0aW9ucy5l
eHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1h
bmQsIGNvbW1hbmRzKSkKIAogICAgICAgICBkZWNsYXJhdGlvbl9hcmdzID0gewogICAgICAgICAg
ICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFj
a2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCA5ODljNWEzYmE1MjdiNzMxYzdlYjYzNzk0MjBlMWRk
YWNlNTAwMGI4Li5mY2NlZGNiYTdhYTRkNDQxMDY3MDY1MjdlNDdiNGJkMzNkY2U2YTljIDEwMDc1
NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTQ1LDcgKzQ1LDcgQEAg
Y2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5l
cmF0b3IpOgogICAgICAgICByZXR1cm4gIiVzQmFja2VuZERpc3BhdGNoZXJzLmNwcCIgJSBzZWxm
LnByb3RvY29sX25hbWUoKQogCiAgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0g
ICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbGVuKGRvbWFpbi5jb21tYW5kcykg
PiAwLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKyAgICAgICAgcmV0dXJu
IGZpbHRlcihsYW1iZGEgZG9tYWluOiBsZW4oc2VsZi5jb21tYW5kc19mb3JfZG9tYWluKGRvbWFp
bikpID4gMCwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCiAKICAgICBkZWYg
Z2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsKQEAg
LTkyLDEyICs5MiwxNCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIH0KICAgICAgICAgaW1wbGVtZW50YXRp
b25zLmFwcGVuZChUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkRvbWFpbkNvbnN0cnVjdG9yKS5zdWJzdGl0dXRlKE5vbmUsICoqY29uc3RydWN0b3Jf
YXJncykpCiAKLSAgICAgICAgaWYgbGVuKGRvbWFpbi5jb21tYW5kcykgPD0gNToKKyAgICAgICAg
Y29tbWFuZHMgPSBzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKQorCisgICAgICAgIGlm
IGxlbihjb21tYW5kcykgPD0gNToKICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9y
X2RvbWFpbihkb21haW4pKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaW1wbGVtZW50YXRp
b25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9sYXJnZV9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1l
bnRhdGlvbl9mb3JfZG9tYWluKGRvbWFpbikpCiAKLSAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9t
YWluLmNvbW1hbmRzOgorICAgICAgICBmb3IgY29tbWFuZCBpbiBjb21tYW5kczoKICAgICAgICAg
ICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6CiAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25z
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hc3luY19kaXNwYXRjaGVyX2NsYXNzX2Zvcl9kb21haW4o
Y29tbWFuZCwgZG9tYWluKSkKICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQoc2Vs
Zi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChjb21tYW5k
LCBkb21haW4pKQpAQCAtMTA1LDEwICsxMDcsMTIgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4g
c2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcblxuJy5qb2luKGltcGxl
bWVudGF0aW9ucykpCiAKICAgICBkZWYgX2dlbmVyYXRlX3NtYWxsX2Rpc3BhdGNoZXJfc3dpdGNo
X2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgY29tbWFu
ZHMgPSBzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKQorCiAgICAgICAgIGNhc2VzID0g
W10KLSAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgaWYgKG1ldGhvZCA9PSAiJXMiKScgJSBkb21h
aW4uY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lKQotICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAg
ICAgJXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsnICUgZG9tYWluLmNvbW1hbmRz
WzBdLmNvbW1hbmRfbmFtZSkKLSAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRz
WzE6XToKKyAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgaWYgKG1ldGhvZCA9PSAiJXMiKScgJSBj
b21tYW5kc1swXS5jb21tYW5kX25hbWUpCisgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAl
cyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOycgJSBjb21tYW5kc1swXS5jb21tYW5k
X25hbWUpCisgICAgICAgIGZvciBjb21tYW5kIGluIGNvbW1hbmRzWzE6XToKICAgICAgICAgICAg
IGNhc2VzLmFwcGVuZCgnICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiJXMiKScgJSBjb21tYW5kLmNv
bW1hbmRfbmFtZSkKICAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAlcyhyZXF1ZXN0
SWQsIFdURk1vdmUocGFyYW1ldGVycykpOycgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKIApAQCAt
MTIwLDggKzEyNCwxMCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIHJldHVybiBUZW1wbGF0ZShDcHBUZW1w
bGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblNtYWxsU3dpdGNoKS5zdWJzdGl0
dXRlKE5vbmUsICoqc3dpdGNoX2FyZ3MpCiAKICAgICBkZWYgX2dlbmVyYXRlX2xhcmdlX2Rpc3Bh
dGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAg
ICAgICAgY29tbWFuZHMgPSBzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKQorCiAgICAg
ICAgIGNhc2VzID0gW10KLSAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgor
ICAgICAgICBmb3IgY29tbWFuZCBpbiBjb21tYW5kczoKICAgICAgICAgICAgIGFyZ3MgPSB7CiAg
ICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCiAgICAgICAg
ICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRj
aGVyX2hlYWRlci5weQppbmRleCAwMTVkNTdlMjUyNWQ1ZDcxMzIwZTMxNGU1OTdkN2RkM2UxZGM4
MGJjLi5lZDU4YjFlMmZjOWExZTZiMWYzNDQ4MTUyZWVmN2ZmZjI0NDNkNThlIDEwMDc1NQotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5CkBAIC00Niw3ICs0Niw3IEBAIGNsYXNzIENwcEZyb250ZW5kRGlz
cGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gIiVz
RnJvbnRlbmREaXNwYXRjaGVycy5oIiAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCiAKICAgICBkZWYg
ZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEg
ZG9tYWluOiBsZW4oZG9tYWluLmV2ZW50cykgPiAwLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5l
cmF0ZShzZWxmKSkKKyAgICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgZG9tYWluOiBsZW4oc2Vs
Zi5ldmVudHNfZm9yX2RvbWFpbihkb21haW4pKSA+IDAsIEdlbmVyYXRvci5kb21haW5zX3RvX2dl
bmVyYXRlKHNlbGYpKQogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKICAgICAgICAg
aGVhZGVycyA9IFsKQEAgLTkwLDggKzkwLDkgQEAgY2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICAgICAgdXNlZF9lbnVtX25hbWVz
ID0gc2V0KFtdKQogCisgICAgICAgIGV2ZW50cyA9IHNlbGYuZXZlbnRzX2Zvcl9kb21haW4oZG9t
YWluKQogICAgICAgICBldmVudF9kZWNsYXJhdGlvbnMgPSBbXQotICAgICAgICBmb3IgZXZlbnQg
aW4gZG9tYWluLmV2ZW50czoKKyAgICAgICAgZm9yIGV2ZW50IGluIGV2ZW50czoKICAgICAgICAg
ICAgIGV2ZW50X2RlY2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9k
ZWNsYXJhdGlvbl9mb3JfZXZlbnQoZXZlbnQsIGRvbWFpbiwgdXNlZF9lbnVtX25hbWVzKSkKIAog
ICAgICAgICBoYW5kbGVyX2FyZ3MgPSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5CmluZGV4IDgyNjljOWNmOTI3Nzg2YjNjMmVkYWIwYTJkNjJmZTVjNDUwODExOTMu
LjBkMDgwNjkwMzkzMDZlMDA2YTM4ZTg4YTUyODE5OWEzZGMzYTMyZjkgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVu
ZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIENw
cEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6
CiAgICAgICAgIHJldHVybiAiJXNGcm9udGVuZERpc3BhdGNoZXJzLmNwcCIgJSBzZWxmLnByb3Rv
Y29sX25hbWUoKQogCiAgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAg
IHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbGVuKGRvbWFpbi5ldmVudHMpID4gMCwgR2Vu
ZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBmaWx0ZXIo
bGFtYmRhIGRvbWFpbjogbGVuKHNlbGYuZXZlbnRzX2Zvcl9kb21haW4oZG9tYWluKSkgPiAwLCBH
ZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKIAogICAgIGRlZiBnZW5lcmF0ZV9v
dXRwdXQoc2VsZik6CiAgICAgICAgIHNlY29uZGFyeV9oZWFkZXJzID0gWwpAQCAtNjksNyArNjks
OCBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihD
cHBHZW5lcmF0b3IpOgogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CiAgICAgICAgIGltcGxlbWVudGF0aW9ucyA9
IFtdCi0gICAgICAgIGZvciBldmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICBldmVudHMg
PSBzZWxmLmV2ZW50c19mb3JfZG9tYWluKGRvbWFpbikKKyAgICAgICAgZm9yIGV2ZW50IGluIGV2
ZW50czoKICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZXZlbnQoZXZlbnQsIGRvbWFpbikpCiAKICAg
ICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG5c
bicuam9pbihpbXBsZW1lbnRhdGlvbnMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVz
X2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkKaW5kZXggZjFjYjg4ZGFl
YmMwMTFlYjU2NTdiMTk4NTAyNTUzYjc0YTNjOTAyOS4uMWY5MWNkZDBmODg3NzZhNmI4ZTc1NTJl
NGIwMGExNWM0YmNlNTEzMiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5w
eQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CkBAIC04Myw3ICs4Myw3IEBAIGNs
YXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAg
ICAgc2VjdGlvbnMgPSBbXQogCiAgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKLSAgICAg
ICAgICAgIGRlY2xhcmF0aW9uX3R5cGVzID0gW2RlY2wudHlwZSBmb3IgZGVjbCBpbiBkb21haW4u
dHlwZV9kZWNsYXJhdGlvbnNdCisgICAgICAgICAgICBkZWNsYXJhdGlvbl90eXBlcyA9IFtkZWNs
LnR5cGUgZm9yIGRlY2wgaW4gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFp
bildCiAgICAgICAgICAgICBvYmplY3RfdHlwZXMgPSBmaWx0ZXIobGFtYmRhIF90eXBlOiBpc2lu
c3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSwgZGVjbGFyYXRpb25fdHlwZXMpCiAgICAgICAgICAg
ICBlbnVtX3R5cGVzID0gZmlsdGVyKGxhbWJkYSBfdHlwZTogaXNpbnN0YW5jZShfdHlwZSwgRW51
bVR5cGUpLCBkZWNsYXJhdGlvbl90eXBlcykKICAgICAgICAgICAgIHNvcnRlZChvYmplY3RfdHlw
ZXMsIGtleT1tZXRob2RjYWxsZXIoJ3Jhd19uYW1lJykpCkBAIC0xMjEsOCArMTIxLDkgQEAgY2xh
c3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogLy8gRW5k
IG9mIHR5cGVkZWZzLiIiIiAlICdcblxuJy5qb2luKHNlY3Rpb25zKQogCiAgICAgZGVmIF9nZW5l
cmF0ZV90eXBlZGVmc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIHByaW1pdGl2
ZV9kZWNsYXJhdGlvbnMgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IGlzaW5zdGFuY2UoZGVjbC50eXBl
LCBBbGlhc2VkVHlwZSksIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9ucykKLSAgICAgICAgYXJyYXlf
ZGVjbGFyYXRpb25zID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBpc2luc3RhbmNlKGRlY2wudHlwZSwg
QXJyYXlUeXBlKSwgZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKQorICAgICAgICB0eXBlX2RlY2xh
cmF0aW9ucyA9IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pCisgICAg
ICAgIHByaW1pdGl2ZV9kZWNsYXJhdGlvbnMgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IGlzaW5zdGFu
Y2UoZGVjbC50eXBlLCBBbGlhc2VkVHlwZSksIHR5cGVfZGVjbGFyYXRpb25zKQorICAgICAgICBh
cnJheV9kZWNsYXJhdGlvbnMgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IGlzaW5zdGFuY2UoZGVjbC50
eXBlLCBBcnJheVR5cGUpLCB0eXBlX2RlY2xhcmF0aW9ucykKICAgICAgICAgaWYgbGVuKHByaW1p
dGl2ZV9kZWNsYXJhdGlvbnMpID09IDAgYW5kIGxlbihhcnJheV9kZWNsYXJhdGlvbnMpID09IDA6
CiAgICAgICAgICAgICByZXR1cm4gJycKIApAQCAtMTc1LDcgKzE3Niw4IEBAIGNsYXNzIENwcFBy
b3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVy
YXRlX2J1aWxkZXJzX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKICAgICAgICAgc2VjdGlvbnMg
PSBbXQogCi0gICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xh
cmF0aW9uczoKKyAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRp
b25zX2Zvcl9kb21haW4oZG9tYWluKQorICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiB0
eXBlX2RlY2xhcmF0aW9uczoKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJh
dGlvbi50eXBlLCBFbnVtVHlwZSk6CiAgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNl
bGYuX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9u
KSkKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUsIE9i
amVjdFR5cGUpOgpAQCAtMzM2LDcgKzMzOCw4IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFk
ZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgdHlwZV9hcmd1bWVudHMgPSBbXQog
CiAgICAgICAgIGZvciBkb21haW4gaW4gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCk6Ci0gICAg
ICAgICAgICBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGUgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IHNl
bGYudHlwZV9uZWVkc19zaGFwZV9hc3NlcnRpb25zKGRlY2wudHlwZSksIGRvbWFpbi50eXBlX2Rl
Y2xhcmF0aW9ucykKKyAgICAgICAgICAgIHR5cGVfZGVjbGFyYXRpb25zID0gc2VsZi50eXBlX2Rl
Y2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbikKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uc190
b19nZW5lcmF0ZSA9IGZpbHRlcihsYW1iZGEgZGVjbDogc2VsZi50eXBlX25lZWRzX3NoYXBlX2Fz
c2VydGlvbnMoZGVjbC50eXBlKSwgdHlwZV9kZWNsYXJhdGlvbnMpCiAKICAgICAgICAgICAgIGZv
ciB0eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZToKICAgICAgICAg
ICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6
CkBAIC0zODUsNyArMzg4LDggQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRv
cihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2UodHlwZV9tZW1i
ZXIudHlwZSwgRW51bVR5cGUpIGFuZCB0eXBlX21lbWJlci50eXBlLmlzX2Fub255bW91cwogCiAg
ICAgICAgIGZvciBkb21haW4gaW4gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCk6Ci0gICAgICAg
ICAgICBkZWNsYXJhdGlvbl90eXBlcyA9IFtkZWNsLnR5cGUgZm9yIGRlY2wgaW4gZG9tYWluLnR5
cGVfZGVjbGFyYXRpb25zXQorICAgICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5
cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQorICAgICAgICAgICAgZGVjbGFyYXRp
b25fdHlwZXMgPSBbZGVjbC50eXBlIGZvciBkZWNsIGluIHR5cGVfZGVjbGFyYXRpb25zXQogICAg
ICAgICAgICAgb2JqZWN0X3R5cGVzID0gZmlsdGVyKGxhbWJkYSBfdHlwZTogaXNpbnN0YW5jZShf
dHlwZSwgT2JqZWN0VHlwZSksIGRlY2xhcmF0aW9uX3R5cGVzKQogICAgICAgICAgICAgZW51bV90
eXBlcyA9IGZpbHRlcihsYW1iZGEgX3R5cGU6IGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSwg
ZGVjbGFyYXRpb25fdHlwZXMpCiAgICAgICAgICAgICBpZiBsZW4ob2JqZWN0X3R5cGVzKSArIGxl
bihlbnVtX3R5cGVzKSA9PSAwOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxl
bWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4
IDMzNTRlMDQ5YWM5MGJlNTFlNjllMzI4NGM3NTc0YzI5YWZiYmFmOTEuLmYzMDJhNzM0MmVhMmFl
Mzc3Mzk1YjQ0ZjY0YzRhZGQwMzRhNjIyYzMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBl
c19pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRp
b24ucHkKQEAgLTExOCw3ICsxMTgsOCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50
YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgIF0pCiAgICAgICAgICAg
ICByZXR1cm4gYm9keV9saW5lcwogCi0gICAgICAgIGRlY2xhcmF0aW9uX3R5cGVzID0gW2RlY2wu
dHlwZSBmb3IgZGVjbCBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnNdCisgICAgICAgIHR5cGVf
ZGVjbGFyYXRpb25zID0gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbikK
KyAgICAgICAgZGVjbGFyYXRpb25fdHlwZXMgPSBbZGVjbC50eXBlIGZvciBkZWNsIGluIHR5cGVf
ZGVjbGFyYXRpb25zXQogICAgICAgICBvYmplY3RfdHlwZXMgPSBmaWx0ZXIobGFtYmRhIF90eXBl
OiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSwgZGVjbGFyYXRpb25fdHlwZXMpCiAgICAg
ICAgIGVudW1fdHlwZXMgPSBmaWx0ZXIobGFtYmRhIF90eXBlOiBpc2luc3RhbmNlKF90eXBlLCBF
bnVtVHlwZSksIGRlY2xhcmF0aW9uX3R5cGVzKQogICAgICAgICBpZiBsZW4ob2JqZWN0X3R5cGVz
KSArIGxlbihlbnVtX3R5cGVzKSA9PSAwOgpAQCAtMTU4LDcgKzE1OSw4IEBAIGNsYXNzIENwcFBy
b3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgIGRl
ZiBfZ2VuZXJhdGVfb3Blbl9maWVsZF9uYW1lcyhzZWxmKToKICAgICAgICAgbGluZXMgPSBbXQog
ICAgICAgICBmb3IgZG9tYWluIGluIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpOgotICAgICAg
ICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gZmlsdGVyKGxhbWJkYSBkZWNsOiBHZW5lcmF0
b3IudHlwZV9oYXNfb3Blbl9maWVsZHMoZGVjbC50eXBlKSwgZG9tYWluLnR5cGVfZGVjbGFyYXRp
b25zKToKKyAgICAgICAgICAgIHR5cGVfZGVjbGFyYXRpb25zID0gc2VsZi50eXBlX2RlY2xhcmF0
aW9uc19mb3JfZG9tYWluKGRvbWFpbikKKyAgICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9u
IGluIGZpbHRlcihsYW1iZGEgZGVjbDogR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRzKGRl
Y2wudHlwZSksIHR5cGVfZGVjbGFyYXRpb25zKToKICAgICAgICAgICAgICAgICBmb3IgdHlwZV9t
ZW1iZXIgaW4gc29ydGVkKHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzLCBrZXk9bGFtYmRh
IG1lbWJlcjogbWVtYmVyLm1lbWJlcl9uYW1lKToKICAgICAgICAgICAgICAgICAgICAgZmllbGRf
bmFtZSA9ICc6Oicuam9pbihbJ0luc3BlY3RvcicsICdQcm90b2NvbCcsIGRvbWFpbi5kb21haW5f
bmFtZSwgdWNmaXJzdCh0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSksIHVjZmlyc3QodHlwZV9t
ZW1iZXIubWVtYmVyX25hbWUpXSkKICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdj
b25zdCBjaGFyKiAlcyA9ICIlcyI7JyAlIChmaWVsZF9uYW1lLCB0eXBlX21lbWJlci5tZW1iZXJf
bmFtZSkpCkBAIC0xNjcsNyArMTY5LDggQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICBkZWYgX2dlbmVyYXRlX2J1aWxk
ZXJzX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKICAgICAgICAgc2VjdGlvbnMgPSBbXQotICAg
ICAgICBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGUgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IHNlbGYu
dHlwZV9uZWVkc19zaGFwZV9hc3NlcnRpb25zKGRlY2wudHlwZSksIGRvbWFpbi50eXBlX2RlY2xh
cmF0aW9ucykKKyAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRp
b25zX2Zvcl9kb21haW4oZG9tYWluKQorICAgICAgICBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGUg
PSBmaWx0ZXIobGFtYmRhIGRlY2w6IHNlbGYudHlwZV9uZWVkc19zaGFwZV9hc3NlcnRpb25zKGRl
Y2wudHlwZSksIHR5cGVfZGVjbGFyYXRpb25zKQogCiAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0
aW9uIGluIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZToKICAgICAgICAgICAgIGZvciB0eXBlX21l
bWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2Jh
Y2tlbmRfY29tbWFuZHMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5CmluZGV4IGE0YjU3Yjg0
Y2I0NDRkZTFjNWMxZGJjMDEwNTYwMDM1NmE2ZGJkZGIuLjU0YmRhYWRiZTk5ZWJiMThhNzY0YzU5
ZWFmOTAzMjM3NTk2NGVhZWUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfanNfYmFja2VuZF9jb21tYW5kcy5weQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4vZW52
IHB5dGhvbgogIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQzLDEyICs0MywxMyBA
QCBjbGFzcyBKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgIGRlZiBv
dXRwdXRfZmlsZW5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzIgogCi0gICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAg
IGRlZiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluKGRvbWFpbik6Ci0gICAgICAgICAgICBkb21haW5f
ZW51bV90eXBlcyA9IGZpbHRlcihsYW1iZGEgZGVjbGFyYXRpb246IGlzaW5zdGFuY2UoZGVjbGFy
YXRpb24udHlwZSwgRW51bVR5cGUpLCBkb21haW4udHlwZV9kZWNsYXJhdGlvbnMpCi0gICAgICAg
ICAgICByZXR1cm4gbGVuKGRvbWFpbi5jb21tYW5kcykgPiAwIG9yIGxlbihkb21haW4uZXZlbnRz
KSA+IDAgb3IgbGVuKGRvbWFpbl9lbnVtX3R5cGVzKSA+IDAKKyAgICBkZWYgc2hvdWxkX2dlbmVy
YXRlX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICB0eXBlX2RlY2xhcmF0aW9ucyA9IHNl
bGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pCisgICAgICAgIGRvbWFpbl9l
bnVtX3R5cGVzID0gZmlsdGVyKGxhbWJkYSBkZWNsYXJhdGlvbjogaXNpbnN0YW5jZShkZWNsYXJh
dGlvbi50eXBlLCBFbnVtVHlwZSksIHR5cGVfZGVjbGFyYXRpb25zKQorICAgICAgICByZXR1cm4g
bGVuKHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pKSA+IDAgb3IgbGVuKHNlbGYuZXZl
bnRzX2Zvcl9kb21haW4oZG9tYWluKSkgPiAwIG9yIGxlbihkb21haW5fZW51bV90eXBlcykgPiAw
CiAKLSAgICAgICAgcmV0dXJuIGZpbHRlcihzaG91bGRfZ2VuZXJhdGVfZG9tYWluLCBHZW5lcmF0
b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKyAgICBkZWYgZG9tYWluc190b19nZW5lcmF0
ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9kb21h
aW4sIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQogCiAgICAgZGVmIGdlbmVy
YXRlX291dHB1dChzZWxmKToKICAgICAgICAgc2VjdGlvbnMgPSBbXQpAQCAtNjQsMTEgKzY1LDE1
IEBAIGNsYXNzIEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAKICAgICAg
ICAgbGluZXMuYXBwZW5kKCcvLyAlKGRvbWFpbilzLicgJSBhcmdzKQogCi0gICAgICAgIGhhc19h
c3luY19jb21tYW5kcyA9IGFueShtYXAobGFtYmRhIGNvbW1hbmQ6IGNvbW1hbmQuaXNfYXN5bmMs
IGRvbWFpbi5jb21tYW5kcykpCi0gICAgICAgIGlmIGxlbihkb21haW4uZXZlbnRzKSA+IDAgb3Ig
aGFzX2FzeW5jX2NvbW1hbmRzOgorICAgICAgICB0eXBlX2RlY2xhcmF0aW9ucyA9IHNlbGYudHlw
ZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pCisgICAgICAgIGNvbW1hbmRzID0gc2Vs
Zi5jb21tYW5kc19mb3JfZG9tYWluKGRvbWFpbikKKyAgICAgICAgZXZlbnRzID0gc2VsZi5ldmVu
dHNfZm9yX2RvbWFpbihkb21haW4pCisKKyAgICAgICAgaGFzX2FzeW5jX2NvbW1hbmRzID0gYW55
KG1hcChsYW1iZGEgY29tbWFuZDogY29tbWFuZC5pc19hc3luYywgY29tbWFuZHMpKQorICAgICAg
ICBpZiBsZW4oZXZlbnRzKSA+IDAgb3IgaGFzX2FzeW5jX2NvbW1hbmRzOgogICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyJShkb21haW4pc0Rpc3BhdGNo
ZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKEluc3Bl
Y3RvckJhY2tlbmQsICIlKGRvbWFpbilzIik7JyAlIGFyZ3MpCiAKLSAgICAgICAgZm9yIGRlY2xh
cmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgZm9yIGRlY2xhcmF0
aW9uIGluIHR5cGVfZGVjbGFyYXRpb25zOgogICAgICAgICAgICAgaWYgZGVjbGFyYXRpb24udHlw
ZS5pc19lbnVtKCk6CiAgICAgICAgICAgICAgICAgZW51bV9hcmdzID0gewogICAgICAgICAgICAg
ICAgICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1lLApAQCAtOTEsNyArOTYsNyBAQCBj
bGFzcyBKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICBkZWYg
aXNfYW5vbnltb3VzX2VudW1fcGFyYW0ocGFyYW0pOgogICAgICAgICAgICAgcmV0dXJuIGlzaW5z
dGFuY2UocGFyYW0udHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbS50eXBlLmlzX2Fub255bW91cwog
Ci0gICAgICAgIGZvciBldmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICBmb3IgZXZlbnQg
aW4gZXZlbnRzOgogICAgICAgICAgICAgZm9yIHBhcmFtIGluIGZpbHRlcihpc19hbm9ueW1vdXNf
ZW51bV9wYXJhbSwgZXZlbnQuZXZlbnRfcGFyYW1ldGVycyk6CiAgICAgICAgICAgICAgICAgZW51
bV9hcmdzID0gewogICAgICAgICAgICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9u
YW1lLApAQCAtMTA3LDcgKzExMiw3IEBAIGNsYXNzIEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9y
KEdlbmVyYXRvcik6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiJShkb21haW4pcy4lKGV2ZW50TmFtZSlzIiwg
WyUocGFyYW1zKXNdKTsnICUgZXZlbnRfYXJncykKIAotICAgICAgICBmb3IgY29tbWFuZCBpbiBk
b21haW4uY29tbWFuZHM6CisgICAgICAgIGZvciBjb21tYW5kIGluIGNvbW1hbmRzOgogICAgICAg
ICAgICAgZGVmIGdlbmVyYXRlX3BhcmFtZXRlcl9vYmplY3QocGFyYW1ldGVyKToKICAgICAgICAg
ICAgICAgICBvcHRpb25hbF9zdHJpbmcgPSAidHJ1ZSIgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFs
IGVsc2UgImZhbHNlIgogICAgICAgICAgICAgICAgIHBhaXJzID0gW10KQEAgLTEyNCw3ICsxMjks
NyBAQCBjbGFzcyBKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyQ29tbWFuZCgiJShkb21haW4pcy4lKGNvbW1hbmROYW1lKXMiLCBbJShjYWxsUGFyYW1zKXNd
LCBbJShyZXR1cm5QYXJhbXMpc10pOycgJSBjb21tYW5kX2FyZ3MpCiAKLSAgICAgICAgaWYgZG9t
YWluLmNvbW1hbmRzIG9yIGRvbWFpbi5ldmVudHM6CisgICAgICAgIGlmIGNvbW1hbmRzIG9yIGV2
ZW50czoKICAgICAgICAgICAgIGFjdGl2YXRlX2FyZ3MgPSB7CiAgICAgICAgICAgICAgICAgJ2Rv
bWFpbic6IGRvbWFpbi5kb21haW5fbmFtZSwKICAgICAgICAgICAgICAgICAnYXZhaWxhYmlsaXR5
JzogZG9tYWluLmF2YWlsYWJpbGl0eSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCA3
MGU1MzQyM2M4YzQ4OWU4MjM3YmIxMjA1NGM3YmU4MjAxMGEwYjM1Li4wNTMxZWQ1M2JlN2U5MmYx
NjEwMDgwMGI1OTFmODFiZjU3ZTBlNTBmIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0
Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBA
IC00Nyw3ICs0Nyw3IEBAIGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
cihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuICclc0JhY2tlbmREaXNwYXRjaGVycy5o
JyAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShz
ZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0
ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBHZW5lcmF0b3Iu
ZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKyAgICAgICAgcmV0dXJuIGZpbHRlcihzZWxmLnNo
b3VsZF9nZW5lcmF0ZV9jb21tYW5kc19mb3JfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19n
ZW5lcmF0ZShzZWxmKSkKIAogICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CiAgICAgICAg
IGhlYWRlcnMgPSBbCkBAIC03MSwxNiArNzEsMTcgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRj
aGVySGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgIGRlZiBfZ2VuZXJhdGVfb2Jq
Y19mb3J3YXJkX2RlY2xhcmF0aW9ucyhzZWxmKToKICAgICAgICAgbGluZXMgPSBbXQogICAgICAg
ICBmb3IgZG9tYWluIGluIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpOgotICAgICAgICAgICAg
aWYgZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAgICAgaWYgc2VsZi5jb21tYW5kc19mb3JfZG9t
YWluKGRvbWFpbik6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAcHJvdG9jb2wgJXMl
c0RvbWFpbkhhbmRsZXI7JyAlIChzZWxmLm9iamNfcHJlZml4KCksIGRvbWFpbi5kb21haW5fbmFt
ZSkpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYgX2dlbmVyYXRl
X29iamNfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgotICAg
ICAgICBpZiBub3QgZG9tYWluLmNvbW1hbmRzOgorICAgICAgICBjb21tYW5kcyA9IHNlbGYuY29t
bWFuZHNfZm9yX2RvbWFpbihkb21haW4pCisgICAgICAgIGlmIG5vdCBjb21tYW5kczoKICAgICAg
ICAgICAgIHJldHVybiAnJwogCiAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zID0gW10KLSAg
ICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgorICAgICAgICBmb3IgY29tbWFu
ZCBpbiBjb21tYW5kczoKICAgICAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoY29tbWFu
ZCkpCiAKICAgICAgICAgaGFuZGxlcl9hcmdzID0gewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weQppbmRleCAwZjQ2ZGU0NDBmYjlmZjAxOGNkYzEzMTNkZjMyNTJlMWRl
ZmNhODM3Li42OTM4Y2EzZTc0YWRiNDg2NGJjZGJlZDJiMTBlNzg2ZmVkNjhkY2E5IDEwMDc1NQot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpj
X2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMzksNyArMzksNyBAQCBm
cm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRl
cyBhcyBPYmpDVGVtcGxhdGVzCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIAog
Ci1jbGFzcyBPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5l
cmF0b3IpOgorY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJn
cyk6CiAgICAgICAgIE9iakNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdz
KQogCkBAIC00Nyw3ICs0Nyw3IEBAIGNsYXNzIE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRp
b25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIHJldHVybiAnJXNCYWNrZW5kRGlz
cGF0Y2hlcnMubW0nICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKIAogICAgIGRlZiBkb21haW5zX3Rv
X2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hv
dWxkX2dlbmVyYXRlX2RvbWFpbl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyKHNlbGYubW9kZWwoKSks
IEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAgICAgICByZXR1cm4gZmls
dGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX2NvbW1hbmRzX2Zvcl9kb21haW4sIEdlbmVyYXRvci5k
b21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxm
KToKICAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCkBAIC03MCwxMSArNzAsMTMgQEAgY2xh
c3MgT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9y
KToKICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQogCiAgICAgZGVmIF9nZW5l
cmF0ZV9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAg
ICAgICAgaWYgbm90IGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAgY29tbWFuZHMgPSBzZWxmLmNv
bW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKQorCisgICAgICAgIGlmIG5vdCBjb21tYW5kczoKICAg
ICAgICAgICAgIHJldHVybiAnJwogCiAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zID0gW10K
LSAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgorICAgICAgICBmb3IgY29t
bWFuZCBpbiBjb21tYW5kczoKICAgICAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zLmFwcGVu
ZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKGRvbWFp
biwgY29tbWFuZCkpCiAKICAgICAgICAgcmV0dXJuICdcbicuam9pbihjb21tYW5kX2RlY2xhcmF0
aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9oZWFkZXIucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Nv
bmZpZ3VyYXRpb25faGVhZGVyLnB5CmluZGV4IDIyZDJjNDIxNzc2NDBkY2U5NWQ1YjYzYmM1NTVj
NzY1NDJmMTY3ZDguLmEyMzJlMmNlNDM5YTNkNzYzZmJmYjk0YjkxNGI2ZTdkZmU0MWI3MGIgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1
cmF0aW9uX2hlYWRlci5weQpAQCAtNTIsOSArNTIsNiBAQCBjbGFzcyBPYmpDQ29uZmlndXJhdGlv
bkhlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgICdpbmNsdWRlcyc6
ICdcbicuam9pbihbJyNpbXBvcnQgJyArIGhlYWRlciBmb3IgaGVhZGVyIGluIGhlYWRlcnNdKSwK
ICAgICAgICAgfQogCi0gICAgICAgIHNlbGYuX2NvbW1hbmRfZmlsdGVyID0gT2JqQ0dlbmVyYXRv
ci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1hbmRfaGFuZGxlcl9maWx0ZXIoc2VsZi5tb2Rl
bCgpKQotICAgICAgICBzZWxmLl9ldmVudF9maWx0ZXIgPSBPYmpDR2VuZXJhdG9yLnNob3VsZF9n
ZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIoc2VsZi5tb2RlbCgpKQotCiAg
ICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQogICAgICAgICBzZWN0
aW9ucyA9IFtdCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2Uo
KSkKQEAgLTgwLDggKzc3LDkgQEAgY2xhc3MgT2JqQ0NvbmZpZ3VyYXRpb25IZWFkZXJHZW5lcmF0
b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIH0KIAogICAgICAgICBsaW5lcyA9IFtdCi0gICAg
ICAgIGlmIGRvbWFpbi5jb21tYW5kcyBhbmQgc2VsZi5fY29tbWFuZF9maWx0ZXIoZG9tYWluKToK
KworICAgICAgICBpZiBzZWxmLnNob3VsZF9nZW5lcmF0ZV9jb21tYW5kc19mb3JfZG9tYWluKGRv
bWFpbik6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5D
b25maWd1cmF0aW9uQ29tbWFuZFByb3BlcnR5KS5zdWJzdGl0dXRlKE5vbmUsICoqcHJvcGVydHlf
YXJncykpCi0gICAgICAgIGlmIGRvbWFpbi5ldmVudHMgYW5kIHNlbGYuX2V2ZW50X2ZpbHRlcihk
b21haW4pOgorICAgICAgICBpZiBzZWxmLnNob3VsZF9nZW5lcmF0ZV9ldmVudHNfZm9yX2RvbWFp
bihkb21haW4pOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0
ZXMuQ29uZmlndXJhdGlvbkV2ZW50UHJvcGVydHkpLnN1YnN0aXR1dGUoTm9uZSwgKipwcm9wZXJ0
eV9hcmdzKSkKICAgICAgICAgcmV0dXJuIGxpbmVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3Vy
YXRpb25faW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRp
b24ucHkKaW5kZXggOWI1MDY5MDdkNmEzM2M5OGE1MjZiMDg0N2NjNWM4OTliOWYxOTQ1Yi4uOTEw
YmNiYWIxMzUwZDA3NmU5NWU1M2RjMGFiOThkYzQ3YjJiY2QzNCAxMDA3NTUKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19j
b25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9p
bXBsZW1lbnRhdGlvbi5weQpAQCAtMzYsNyArMzYsNyBAQCBmcm9tIG9iamNfZ2VuZXJhdG9yX3Rl
bXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiBs
b2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIAogCi1jbGFzcyBPYmpDQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKK2NsYXNzIE9i
akNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAg
ICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIE9iakNHZW5l
cmF0b3IuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQogCkBAIC01OCw5ICs1OCw2IEBA
IGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNH
ZW5lcmF0b3IpOgogICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogJ1xuJy5qb2luKFsn
I2ltcG9ydCAlcycgJSBoZWFkZXIgZm9yIGhlYWRlciBpbiBzZWNvbmRhcnlfaGVhZGVyc10pLAog
ICAgICAgICB9CiAKLSAgICAgICAgc2VsZi5fY29tbWFuZF9maWx0ZXIgPSBPYmpDR2VuZXJhdG9y
LnNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRlcihzZWxmLm1vZGVs
KCkpCi0gICAgICAgIHNlbGYuX2V2ZW50X2ZpbHRlciA9IE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dl
bmVyYXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpCi0KICAg
ICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCiAgICAgICAgIHNlY3Rp
b25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgp
KQpAQCAtOTAsMTAgKzg3LDEwIEBAIGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBsaW5lcy5leHRlbmQoc2Vs
Zi5fZ2VuZXJhdGVfZGVhbGxvYyhkb21haW5zKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQog
ICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6Ci0gICAgICAgICAgICBpZiBkb21haW4uY29t
bWFuZHMgYW5kIHNlbGYuX2NvbW1hbmRfZmlsdGVyKGRvbWFpbik6CisgICAgICAgICAgICBpZiBz
ZWxmLnNob3VsZF9nZW5lcmF0ZV9jb21tYW5kc19mb3JfZG9tYWluKGRvbWFpbik6CiAgICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfc2V0dGVyX2Zvcl9k
b21haW4oZG9tYWluKSkKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAg
ICAgICBpZiBkb21haW4uZXZlbnRzIGFuZCBzZWxmLl9ldmVudF9maWx0ZXIoZG9tYWluKToKKyAg
ICAgICAgICAgIGlmIHNlbGYuc2hvdWxkX2dlbmVyYXRlX2V2ZW50c19mb3JfZG9tYWluKGRvbWFp
bik6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2V2ZW50X2Rp
c3BhdGNoZXJfZ2V0dGVyX2Zvcl9kb21haW4oZG9tYWluKSkKICAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGVuZCcpCkBAIC0xMDIsMTEgKzk5
LDExIEBAIGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
KE9iakNHZW5lcmF0b3IpOgogICAgIGRlZiBfZ2VuZXJhdGVfaXZhcnMoc2VsZiwgZG9tYWlucyk6
CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgotICAg
ICAgICAgICAgaWYgZG9tYWluLmNvbW1hbmRzIGFuZCBzZWxmLl9jb21tYW5kX2ZpbHRlcihkb21h
aW4pOgorICAgICAgICAgICAgaWYgc2VsZi5zaG91bGRfZ2VuZXJhdGVfY29tbWFuZHNfZm9yX2Rv
bWFpbihkb21haW4pOgogICAgICAgICAgICAgICAgIG9iamNfY2xhc3NfbmFtZSA9ICclcyVzRG9t
YWluSGFuZGxlcicgJSAoc2VsZi5vYmpjX3ByZWZpeCgpLCBkb21haW4uZG9tYWluX25hbWUpCiAg
ICAgICAgICAgICAgICAgaXZhcl9uYW1lID0gJ18lc0hhbmRsZXInICUgT2JqQ0dlbmVyYXRvci52
YXJpYWJsZV9uYW1lX3ByZWZpeF9mb3JfZG9tYWluKGRvbWFpbikKICAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBpZDwlcz4gJXM7JyAlIChvYmpjX2NsYXNzX25hbWUsIGl2YXJfbmFt
ZSkpCi0gICAgICAgICAgICBpZiBkb21haW4uZXZlbnRzIGFuZCBzZWxmLl9ldmVudF9maWx0ZXIo
ZG9tYWluKToKKyAgICAgICAgICAgIGlmIHNlbGYuc2hvdWxkX2dlbmVyYXRlX2V2ZW50c19mb3Jf
ZG9tYWluKGRvbWFpbik6CiAgICAgICAgICAgICAgICAgb2JqY19jbGFzc19uYW1lID0gJyVzJXNE
b21haW5FdmVudERpc3BhdGNoZXInICUgKHNlbGYub2JqY19wcmVmaXgoKSwgZG9tYWluLmRvbWFp
bl9uYW1lKQogICAgICAgICAgICAgICAgIGl2YXJfbmFtZSA9ICdfJXNFdmVudERpc3BhdGNoZXIn
ICUgT2JqQ0dlbmVyYXRvci52YXJpYWJsZV9uYW1lX3ByZWZpeF9mb3JfZG9tYWluKGRvbWFpbikK
ICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlcyAqJXM7JyAlIChvYmpjX2NsYXNz
X25hbWUsIGl2YXJfbmFtZSkpCkBAIC0xMTcsOSArMTE0LDkgQEAgY2xhc3MgT2JqQ0JhY2tlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAg
IGxpbmVzLmFwcGVuZCgnLSAodm9pZClkZWFsbG9jJykKICAgICAgICAgbGluZXMuYXBwZW5kKCd7
JykKICAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgotICAgICAgICAgICAgaWYgZG9tYWlu
LmNvbW1hbmRzIGFuZCBzZWxmLl9jb21tYW5kX2ZpbHRlcihkb21haW4pOgorICAgICAgICAgICAg
aWYgc2VsZi5zaG91bGRfZ2VuZXJhdGVfY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pOgogICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFtfJXNIYW5kbGVyIHJlbGVhc2VdOycgJSBP
YmpDR2VuZXJhdG9yLnZhcmlhYmxlX25hbWVfcHJlZml4X2Zvcl9kb21haW4oZG9tYWluKSkKLSAg
ICAgICAgICAgIGlmIGRvbWFpbi5ldmVudHMgYW5kIHNlbGYuX2V2ZW50X2ZpbHRlcihkb21haW4p
OgorICAgICAgICAgICAgaWYgc2VsZi5zaG91bGRfZ2VuZXJhdGVfZXZlbnRzX2Zvcl9kb21haW4o
ZG9tYWluKToKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBbXyVzRXZlbnREaXNw
YXRjaGVyIHJlbGVhc2VdOycgJSBPYmpDR2VuZXJhdG9yLnZhcmlhYmxlX25hbWVfcHJlZml4X2Zv
cl9kb21haW4oZG9tYWluKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgW3N1cGVyIGRlYWxs
b2NdOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggOGQ3MjljMzAwNDkzNTQxMDEzNDYxOWNmNWRmM2Fi
Yjg2ZmJlOGNlMS4uNzIyZDVkMzkyMmY4Yjk0YzM2ZTk1Yzc3NGY2OGU3YzJkYzkxNTVmNiAxMDA3
NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtNDUsNyArNDUs
NyBAQCBjbGFzcyBPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Io
T2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIHJldHVybiAnJXNFdmVudERpc3BhdGNoZXJzLm1tJyAl
IHNlbGYucHJvdG9jb2xfbmFtZSgpCiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxm
KToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9k
b21haW5fZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIoc2VsZi5tb2RlbCgpKSwgR2VuZXJhdG9yLmRv
bWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBmaWx0ZXIoc2VsZi5zaG91
bGRfZ2VuZXJhdGVfZXZlbnRzX2Zvcl9kb21haW4sIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVy
YXRlKHNlbGYpKQogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKICAgICAgICAgc2Vj
b25kYXJ5X2hlYWRlcnMgPSBbCkBAIC02Nyw3ICs2Nyw3IEBAIGNsYXNzIE9iakNGcm9udGVuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAg
cmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9ucyhzZWxmLCBkb21haW4pOgotICAgICAgICBpZiBub3Qg
ZG9tYWluLmV2ZW50czoKKyAgICAgICAgaWYgbm90IHNlbGYuc2hvdWxkX2dlbmVyYXRlX2V2ZW50
c19mb3JfZG9tYWluKGRvbWFpbik6CiAgICAgICAgICAgICByZXR1cm4gJycKIAogICAgICAgICBs
aW5lcyA9IFtdCkBAIC04Nyw3ICs4Nyw3IEBAIGNsYXNzIE9iakNGcm9udGVuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgcmV0dXJuIHNlbGY7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKICAgICAg
ICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2ZW50czoK
KyAgICAgICAgZm9yIGV2ZW50IGluIHNlbGYuZXZlbnRzX2Zvcl9kb21haW4oZG9tYWluKToKICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9ldmVudChkb21haW4sIGV2ZW50
KSkKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKICAgICAgICAgbGluZXMuYXBwZW5kKCdA
ZW5kJykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkKaW5kZXgg
YmQ4ZjA1ZGRmYmY4Njc5NWEyNmY1ODQwMzZkODRjNGM3M2NkMDM5Yy4uMmU1MmZlNmU3YzRkNjQy
NDM3OTBjZjUxNTcwMDJiNjI5Y2Y0ZTBkZSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfb2JqY19oZWFkZXIucHkKQEAgLTYwLDkgKzYwLDkgQEAgY2xhc3MgT2JqQ0hlYWRlckdlbmVy
YXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgfQogCiAgICAgICAgIGRvbWFpbnMgPSBzZWxm
LmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQotICAgICAgICB0eXBlX2RvbWFpbnMgPSBmaWx0ZXIoT2Jq
Q0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVzX2ZpbHRlcihzZWxmLm1vZGVs
KCkpLCBkb21haW5zKQotICAgICAgICBjb21tYW5kX2RvbWFpbnMgPSBmaWx0ZXIoT2JqQ0dlbmVy
YXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1hbmRfaGFuZGxlcl9maWx0ZXIoc2VsZi5t
b2RlbCgpKSwgZG9tYWlucykKLSAgICAgICAgZXZlbnRfZG9tYWlucyA9IGZpbHRlcihPYmpDR2Vu
ZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIoc2Vs
Zi5tb2RlbCgpKSwgZG9tYWlucykKKyAgICAgICAgdHlwZV9kb21haW5zID0gZmlsdGVyKHNlbGYu
c2hvdWxkX2dlbmVyYXRlX3R5cGVzX2Zvcl9kb21haW4sIGRvbWFpbnMpCisgICAgICAgIGNvbW1h
bmRfZG9tYWlucyA9IGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9jb21tYW5kc19mb3JfZG9t
YWluLCBkb21haW5zKQorICAgICAgICBldmVudF9kb21haW5zID0gZmlsdGVyKHNlbGYuc2hvdWxk
X2dlbmVyYXRlX2V2ZW50c19mb3JfZG9tYWluLCBkb21haW5zKQogCiAgICAgICAgICMgRklYTUU6
IDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzgyMjI+IFdlYiBJbnNwZWN0b3I6IFJlZHVjZSB1bm5l
Y2Vzc2FyeSBlbnVtcy90eXBlcyBnZW5lcmF0ZWQgaW4gT2JqQyBQcm90b2NvbCBJbnRlcmZhY2Vz
CiAgICAgICAgICMgQ3VycmVudGx5IHdlIGdlbmVyYXRlIGVudW1zL3R5cGVzIGZvciBhbGwgdHlw
ZXMgaW4gdGhlIHR5cGVfZG9tYWlucy4gRm9yIHRoZSBidWlsdC1pbgpAQCAtODUsNyArODUsNyBA
QCBjbGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogCiAgICAgZGVmIF9n
ZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyhzZWxmLCBkb21haW4pOgogICAgICAgICBsaW5l
cyA9IFtdCi0gICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlv
bnM6CisgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zv
cl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKGRlY2xhcmF0aW9u
LnR5cGUsIE9iamVjdFR5cGUpKToKICAgICAgICAgICAgICAgICBvYmpjX25hbWUgPSBzZWxmLm9i
amNfbmFtZV9mb3JfdHlwZShkZWNsYXJhdGlvbi50eXBlKQogICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnQGNsYXNzICVzOycgJSBvYmpjX25hbWUpCkBAIC05NSw3ICs5NSw3IEBAIGNsYXNz
IE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzID0gW10K
IAogICAgICAgICAjIFR5cGUgZW51bXMgYW5kIG1lbWJlciBlbnVtcy4KLSAgICAgICAgZm9yIGRl
Y2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgZm9yIGRlY2xh
cmF0aW9uIGluIHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pOgogICAg
ICAgICAgICAgaWYgaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBFbnVtVHlwZSk6CiAgICAg
ICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCiAgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9kZWNsYXJhdGlvbihkb21haW4s
IGRlY2xhcmF0aW9uKSkKQEAgLTEwNiw3ICsxMDYsNyBAQCBjbGFzcyBPYmpDSGVhZGVyR2VuZXJh
dG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9tZW1iZXIoZG9tYWluLCBkZWNsYXJh
dGlvbiwgbWVtYmVyKSkKIAogICAgICAgICAjIEFub255bW91cyBjb21tYW5kIGVudW1zLgotICAg
ICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAgICAgIGZvciBjb21tYW5k
IGluIHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pOgogICAgICAgICAgICAgZm9yIHBh
cmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKICAgICAgICAgICAgICAgICBpZiBp
c2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlz
X2Fub255bW91czoKICAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCkBAIC0x
MTcsNyArMTE3LDcgQEAgY2xhc3MgT2JqQ0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToK
ICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91
c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1l
dGVyKSkKIAogICAgICAgICAjIEFub255bW91cyBldmVudCBlbnVtcy4KLSAgICAgICAgZm9yIGV2
ZW50IGluIGRvbWFpbi5ldmVudHM6CisgICAgICAgIGZvciBldmVudCBpbiBzZWxmLmV2ZW50c19m
b3JfZG9tYWluKGRvbWFpbik6CiAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2
ZW50X3BhcmFtZXRlcnM6CiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIu
dHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXM6CiAgICAgICAg
ICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQpAQCAtMTI4LDcgKzEyOCw3IEBAIGNsYXNz
IE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV90
eXBlcyhzZWxmLCBkb21haW4pOgogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgICMgVHlwZSBp
bnRlcmZhY2VzLgotICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFy
YXRpb25zOgorICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gc2VsZi50eXBlX2RlY2xhcmF0aW9u
c19mb3JfZG9tYWluKGRvbWFpbik6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRlY2xhcmF0
aW9uLnR5cGUsIE9iamVjdFR5cGUpOgogICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVz
KQogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV90eXBlX2ludGVy
ZmFjZShkb21haW4sIGRlY2xhcmF0aW9uKSkKQEAgLTE5MiwxMSArMTkyLDExIEBAIGNsYXNzIE9i
akNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAgICBkZWYgX2dlbmVyYXRlX2Nv
bW1hbmRfcHJvdG9jb2xzKHNlbGYsIGRvbWFpbik6CiAgICAgICAgIGxpbmVzID0gW10KLSAgICAg
ICAgaWYgZG9tYWluLmNvbW1hbmRzOgorICAgICAgICBpZiBzZWxmLmNvbW1hbmRzX2Zvcl9kb21h
aW4oZG9tYWluKToKICAgICAgICAgICAgIG9iamNfbmFtZSA9ICclcyVzRG9tYWluSGFuZGxlcicg
JSAoc2VsZi5vYmpjX3ByZWZpeCgpLCBkb21haW4uZG9tYWluX25hbWUpCiAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ0Bwcm90b2NvbCAlcyA8TlNPYmplY3Q+JyAlIG9iamNfbmFtZSkKICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnQHJlcXVpcmVkJykKLSAgICAgICAgICAgIGZvciBjb21tYW5k
IGluIGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAgICAgIGZvciBjb21tYW5kIGluIHNlbGYuY29t
bWFuZHNfZm9yX2RvbWFpbihkb21haW4pOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9zaW5nbGVfY29tbWFuZF9wcm90b2NvbChkb21haW4sIGNvbW1hbmQpKQog
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKICAgICAgICAgcmV0dXJuICdcbicuam9p
bihsaW5lcykKQEAgLTIxOCwxMSArMjE4LDEyIEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3Io
T2JqQ0dlbmVyYXRvcik6CiAKICAgICBkZWYgX2dlbmVyYXRlX2V2ZW50X2ludGVyZmFjZXMoc2Vs
ZiwgZG9tYWluKToKICAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBpZiBkb21haW4uZXZlbnRz
OgorICAgICAgICBldmVudHMgPSBzZWxmLmV2ZW50c19mb3JfZG9tYWluKGRvbWFpbikKKyAgICAg
ICAgaWYgbGVuKGV2ZW50cyk6CiAgICAgICAgICAgICBvYmpjX25hbWUgPSAnJXMlc0RvbWFpbkV2
ZW50RGlzcGF0Y2hlcicgJSAoc2VsZi5vYmpjX3ByZWZpeCgpLCBkb21haW4uZG9tYWluX25hbWUp
CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKScpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbnRlcmZhY2UgJXMgOiBO
U09iamVjdCcgJSBvYmpjX25hbWUpCi0gICAgICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2
ZW50czoKKyAgICAgICAgICAgIGZvciBldmVudCBpbiBldmVudHM6CiAgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3NpbmdsZV9ldmVudF9pbnRlcmZhY2UoZG9tYWlu
LCBldmVudCkpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQogICAgICAgICByZXR1
cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19pbnRlcm5hbF9oZWFkZXIucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weQppbmRleCA3NzQ4OGY2ZDU0MGZlMDNiMzkxODg1MGY2
ZTI2NmNhMzYzOGY5YjNjLi45ZjA2Y2VkNDAyNDkwYTE1MTRlNTM0NmM1ZDNjOGJlMjA4OGY4YmNm
IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2ludGVybmFs
X2hlYWRlci5weQpAQCAtNTUsOCArNTUsNyBAQCBjbGFzcyBPYmpDSW50ZXJuYWxIZWFkZXJHZW5l
cmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICAnaW5jbHVkZXMnOiAnXG4nLmpvaW4o
WycjaW1wb3J0ICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBzb3J0ZWQoaGVhZGVycyldKSwKICAg
ICAgICAgfQogCi0gICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQot
ICAgICAgICBldmVudF9kb21haW5zID0gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVy
YXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBkb21haW5z
KQorICAgICAgICBldmVudF9kb21haW5zID0gZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX2V2
ZW50c19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkKIAogICAgICAgICBz
ZWN0aW9ucyA9IFtdCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vu
c2UoKSkKQEAgLTY3LDcgKzY2LDcgQEAgY2xhc3MgT2JqQ0ludGVybmFsSGVhZGVyR2VuZXJhdG9y
KE9iakNHZW5lcmF0b3IpOgogCiAgICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX3By
aXZhdGVfaW50ZXJmYWNlcyhzZWxmLCBkb21haW4pOgogICAgICAgICBsaW5lcyA9IFtdCi0gICAg
ICAgIGlmIGRvbWFpbi5ldmVudHM6CisgICAgICAgIGlmIGxlbihzZWxmLmV2ZW50c19mb3JfZG9t
YWluKGRvbWFpbikpOgogICAgICAgICAgICAgb2JqY19uYW1lID0gJyVzJXNEb21haW5FdmVudERp
c3BhdGNoZXInICUgKHNlbGYub2JqY19wcmVmaXgoKSwgZG9tYWluLmRvbWFpbl9uYW1lKQogICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCdAaW50ZXJmYWNlICVzIChQcml2YXRlKScgJSBvYmpjX25h
bWUpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250
cm9sbGVyOycpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVh
ZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hlYWRlci5weQppbmRleCA4
YzM4M2QxZTkxNGE0MjBjNWRiMzc1MWRhZDliNDY5Yjc1ZGU5NDRlLi45N2ZlMGE1OTRhMmQwNWJh
ZTU3MDE1NzJiOWU3ODI4YzcxNTRmNjhhIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVf
Y29udmVyc2lvbnNfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9u
c19oZWFkZXIucHkKQEAgLTUxLDcgKzUxLDcgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZUNvbnZl
cnNpb25zSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gJyVz
VHlwZUNvbnZlcnNpb25zLmgnICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKIAogICAgIGRlZiBkb21h
aW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmlsdGVyKE9iakNHZW5lcmF0
b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl90eXBlc19maWx0ZXIoc2VsZi5tb2RlbCgpKSwgR2Vu
ZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBmaWx0ZXIo
c2VsZi5zaG91bGRfZ2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNf
dG9fZ2VuZXJhdGUoc2VsZikpCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAg
ICAgICBoZWFkZXJzID0gWwpAQCAtNzcsNyArNzcsNyBAQCBjbGFzcyBPYmpDUHJvdG9jb2xUeXBl
Q29udmVyc2lvbnNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIGxpbmVz
ID0gW10KIAogICAgICAgICAjIFR5cGUgZW51bXMgYW5kIG1lbWJlciBlbnVtcy4KLSAgICAgICAg
Zm9yIGRlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgZm9y
IGRlY2xhcmF0aW9uIGluIHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4p
OgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBFbnVtVHlwZSk6
CiAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCiAgICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX2Rl
Y2xhcmF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQpAQCAtODgsNyArODgsNyBAQCBjbGFzcyBP
YmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6
CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5v
bnltb3VzX2VudW1fY29udmVyc2lvbl9mb3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1l
bWJlcikpCiAKICAgICAgICAgIyBBbm9ueW1vdXMgY29tbWFuZCBlbnVtcy4KLSAgICAgICAgZm9y
IGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgorICAgICAgICBmb3IgY29tbWFuZCBpbiBzZWxm
LmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIg
aW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICAgICAgaWYgKGlzaW5zdGFu
Y2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnlt
b3VzKToKICAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCkBAIC05OSw3ICs5
OSw3IEBAIGNsYXNzIE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0hlYWRlckdlbmVyYXRvcihP
YmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihkb21haW4sIGNv
bW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpKQogCiAgICAgICAgICMgQW5vbnltb3VzIGV2
ZW50IGVudW1zLgotICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2ZW50czoKKyAgICAgICAg
Zm9yIGV2ZW50IGluIHNlbGYuZXZlbnRzX2Zvcl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAg
IGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKICAgICAgICAgICAgICAg
ICBpZiAoaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIu
dHlwZS5pc19hbm9ueW1vdXMpOgogICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5l
cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRh
dGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5w
eQppbmRleCBiYWRkY2YzY2Q0YzlhM2Y3ZmIzY2NlYTg3MWQ5Mzk3ZGM2MmU2ODhjLi5iNTFmZjU2
NWY0M2YyZjlhZDk0NTM2OTYzODBmYzM2ZWE2N2E1MjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3Rv
Y29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2Nv
bF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9uLnB5CkBAIC01MCw3ICs1MCw3IEBAIGNs
YXNzIE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9i
akNHZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gJyVzVHlwZUNvbnZlcnNpb25zLm1tJyAlIHNl
bGYucHJvdG9jb2xfbmFtZSgpCiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToK
LSAgICAgICAgcmV0dXJuIGZpbHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21h
aW5fdHlwZXNfZmlsdGVyKHNlbGYubW9kZWwoKSksIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVy
YXRlKHNlbGYpKQorICAgICAgICByZXR1cm4gZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX3R5
cGVzX2Zvcl9kb21haW4sIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQogCiAg
ICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKICAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMg
PSBbCkBAIC04MCw3ICs4MCw3IEBAIGNsYXNzIE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0lt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCdAaW50ZXJmYWNlICVzVHlwZUNvbnZlcnNpb25zICglc0RvbWFpbiknICUgKHNlbGYu
cHJvdG9jb2xfbmFtZSgpLCBkb21haW4uZG9tYWluX25hbWUpKQogICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcnKQogCi0gICAgICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVf
ZGVjbGFyYXRpb25zOgorICAgICAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIHNlbGYudHlwZV9k
ZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pOgogICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV90eXBlX2ZhY3RvcnlfbWV0aG9kX2RlY2xhcmF0aW9uKGRvbWFp
biwgZGVjbGFyYXRpb24pKQogCiAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKQEAgLTEw
NCw3ICsxMDQsNyBAQCBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
QGltcGxlbWVudGF0aW9uICVzVHlwZUNvbnZlcnNpb25zICglc0RvbWFpbiknICUgKHNlbGYucHJv
dG9jb2xfbmFtZSgpLCBkb21haW4uZG9tYWluX25hbWUpKQogICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcnKQogCi0gICAgICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVj
bGFyYXRpb25zOgorICAgICAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIHNlbGYudHlwZV9kZWNs
YXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZChzZWxmLl9nZW5lcmF0ZV90eXBlX2ZhY3RvcnlfbWV0aG9kX2ltcGxlbWVudGF0aW9uKGRvbWFp
biwgZGVjbGFyYXRpb24pKQogICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQogICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xf
dHlwZXNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0
aW9uLnB5CmluZGV4IGJhMGUyZWU5ZTY0NTk5NjYyZDc0NTZjYjUzNDNhODg2OWMwMmZjNTcuLmNl
OWFlMzQ5OWEyNjcyNjgxMzQ4MDc3NWU1ZmNmNTI2ODg3ODMwN2IgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
cHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBl
c19pbXBsZW1lbnRhdGlvbi5weQpAQCAtNTEsNyArNTEsNyBAQCBjbGFzcyBPYmpDUHJvdG9jb2xU
eXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICByZXR1
cm4gJyVzVHlwZXMubW0nICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKIAogICAgIGRlZiBkb21haW5z
X3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmlsdGVyKE9iakNHZW5lcmF0b3Iu
c2hvdWxkX2dlbmVyYXRlX2RvbWFpbl90eXBlc19maWx0ZXIoc2VsZi5tb2RlbCgpKSwgR2VuZXJh
dG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBmaWx0ZXIoc2Vs
Zi5zaG91bGRfZ2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNfdG9f
Z2VuZXJhdGUoc2VsZikpCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAg
ICBzZWNvbmRhcnlfaGVhZGVycyA9IFsKQEAgLTgxLDcgKzgxLDcgQEAgY2xhc3MgT2JqQ1Byb3Rv
Y29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKIAogICAgIGRl
ZiBnZW5lcmF0ZV90eXBlX2ltcGxlbWVudGF0aW9ucyhzZWxmLCBkb21haW4pOgogICAgICAgICBs
aW5lcyA9IFtdCi0gICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJh
dGlvbnM6CisgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25z
X2Zvcl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKGRlY2xhcmF0
aW9uLnR5cGUsIE9iamVjdFR5cGUpKToKICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5l
cykKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV90eXBlX2ltcGxl
bWVudGF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5Cmlu
ZGV4IGIwOTZlZjUwZjhkOWY2N2ZmYjZmNWJhMDE3YmI2NjdjNWU3NWNlMGQuLmUxNTZiMWRiZjE0
NDgyNTk1OTVhMmNiODcxNDRiNGEyNjMwYjYzOTQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkK
QEAgLTMwLDcgKzMwLDcgQEAgaW1wb3J0IHJlCiBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUK
IAogZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMg
VGVtcGxhdGVzCi1mcm9tIG1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwg
QXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKK2Zyb20gbW9kZWxz
IGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBB
bGlhc2VkVHlwZSwgRnJhbWV3b3JrcywgUGxhdGZvcm1zCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9n
Z2VyKCdnbG9iYWwnKQogCkBAIC05MSw2ICs5MSwxOCBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAg
ZGVmIHNldF9nZW5lcmF0b3Jfc2V0dGluZyhzZWxmLCBrZXksIHZhbHVlKToKICAgICAgICAgc2Vs
Zi5fc2V0dGluZ3Nba2V5XSA9IHZhbHVlCiAKKyAgICBkZWYgY2FuX2dlbmVyYXRlX3BsYXRmb3Jt
KHNlbGYsIG1vZGVsX3BsYXRmb3JtKToKKyAgICAgICAgcmV0dXJuIG1vZGVsX3BsYXRmb3JtIGlz
IFBsYXRmb3Jtcy5HZW5lcmljIG9yIHNlbGYuX3BsYXRmb3JtIGlzIFBsYXRmb3Jtcy5BbGwgb3Ig
bW9kZWxfcGxhdGZvcm0gaXMgc2VsZi5fcGxhdGZvcm0KKworICAgIGRlZiB0eXBlX2RlY2xhcmF0
aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIHJldHVybiBbdHlwZV9kZWNs
YXJhdGlvbiBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkb21haW4uYWxsX3R5cGVfZGVjbGFyYXRp
b25zKCkgaWYgc2VsZi5jYW5fZ2VuZXJhdGVfcGxhdGZvcm0odHlwZV9kZWNsYXJhdGlvbi5wbGF0
Zm9ybSldCisKKyAgICBkZWYgY29tbWFuZHNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAg
ICAgICByZXR1cm4gW2NvbW1hbmQgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmFsbF9jb21tYW5kcygp
IGlmIHNlbGYuY2FuX2dlbmVyYXRlX3BsYXRmb3JtKGNvbW1hbmQucGxhdGZvcm0pXQorCisgICAg
ZGVmIGV2ZW50c19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIHJldHVybiBbZXZl
bnQgZm9yIGV2ZW50IGluIGRvbWFpbi5hbGxfZXZlbnRzKCkgaWYgc2VsZi5jYW5fZ2VuZXJhdGVf
cGxhdGZvcm0oZXZlbnQucGxhdGZvcm0pXQorCiAgICAgIyBUaGUgZ29vZnkgbmFtZSBpcyB0byBk
aXNhbWJpZ3VhdGUgZ2VuZXJhdG9yIHNldHRpbmdzIGZyb20gZnJhbWV3b3JrIHNldHRpbmdzLgog
ICAgIGRlZiBnZXRfZ2VuZXJhdG9yX3NldHRpbmcoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgog
ICAgICAgICByZXR1cm4gc2VsZi5fc2V0dGluZ3MuZ2V0KGtleSwgZGVmYXVsdCkKQEAgLTE2NSw3
ICsxNzcsNyBAQCBjbGFzcyBHZW5lcmF0b3I6CiAKICAgICAgICAgZm91bmRfdHlwZXMgPSBzZXQo
KQogICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6Ci0gICAgICAgICAgICBmb3IgZGVjbGFy
YXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAgZm9yIGRlY2xh
cmF0aW9uIGluIHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pOgogICAg
ICAgICAgICAgICAgIGlmIGRlY2xhcmF0aW9uLnR5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBfVFlQ
RVNfTkVFRElOR19SVU5USU1FX0NBU1RTOgogICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWco
Ij4gR2F0aGVyaW5nIHR5cGVzIHJlZmVyZW5jZWQgYnkgJXMgdG8gZ2VuZXJhdGUgc2hhcGUgYXNz
ZXJ0aW9ucy4iICUgZGVjbGFyYXRpb24udHlwZS5xdWFsaWZpZWRfbmFtZSgpKQogICAgICAgICAg
ICAgICAgICAgICBnYXRoZXJfdHJhbnNpdGl2ZWx5X3JlZmVyZW5jZWRfdHlwZXMoZGVjbGFyYXRp
b24udHlwZSwgZm91bmRfdHlwZXMpCkBAIC0xODEsMTcgKzE5MywxNyBAQCBjbGFzcyBHZW5lcmF0
b3I6CiAgICAgICAgIGRvbWFpbnMgPSBzZWxmLm5vbl9zdXBwbGVtZW50YWxfZG9tYWlucygpCiAK
ICAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgotICAgICAgICAgICAgZm9yIHR5cGVfZGVj
bGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAgZm9yIHR5
cGVfZGVjbGFyYXRpb24gaW4gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFp
bik6CiAgICAgICAgICAgICAgICAgYWxsX3R5cGVzLmFwcGVuZCh0eXBlX2RlY2xhcmF0aW9uLnR5
cGUpCiAgICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24u
dHlwZV9tZW1iZXJzOgogICAgICAgICAgICAgICAgICAgICBhbGxfdHlwZXMuYXBwZW5kKHR5cGVf
bWVtYmVyLnR5cGUpCiAKICAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgotICAgICAgICAg
ICAgZm9yIGV2ZW50IGluIGRvbWFpbi5ldmVudHM6CisgICAgICAgICAgICBmb3IgZXZlbnQgaW4g
c2VsZi5ldmVudHNfZm9yX2RvbWFpbihkb21haW4pOgogICAgICAgICAgICAgICAgIGFsbF90eXBl
cy5leHRlbmQoW3BhcmFtZXRlci50eXBlIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFy
YW1ldGVyc10pCiAKICAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgotICAgICAgICAgICAg
Zm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAgICAgZm9yIGNvbW1hbmQg
aW4gc2VsZi5jb21tYW5kc19mb3JfZG9tYWluKGRvbWFpbik6CiAgICAgICAgICAgICAgICAgYWxs
X3R5cGVzLmV4dGVuZChbcGFyYW1ldGVyLnR5cGUgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNh
bGxfcGFyYW1ldGVyc10pCiAgICAgICAgICAgICAgICAgYWxsX3R5cGVzLmV4dGVuZChbcGFyYW1l
dGVyLnR5cGUgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzXSkKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vbW9kZWxzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vbW9kZWxzLnB5CmluZGV4IDY3ODA2MGUyNzBhNjIyNGQ4M2E0ZDQ3OGZlOGNjN2E5NzU5
ZWJkMDEuLjgxMGUwOTViZjhkOTc2NDNjMGI1Y2M1OWJjZTczNzBhMmQ1MzQ5M2QgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVs
cy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9tb2RlbHMucHkKQEAgLTQwMCw3ICs0MDAsOCBAQCBjbGFzcyBQcm90b2NvbDoKICAgICAgICAg
ICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246
IHR5cGUgZGVjbGFyYXRpb24gZm9yICVzIGhhcyBkdXBsaWNhdGUgbWVtYmVyIG5hbWVzIiAlIGpz
b25bJ2lkJ10pCiAKICAgICAgICAgdHlwZV9yZWYgPSBUeXBlUmVmZXJlbmNlKGpzb25bJ3R5cGUn
XSwganNvbi5nZXQoJyRyZWYnKSwganNvbi5nZXQoJ2VudW0nKSwganNvbi5nZXQoJ2l0ZW1zJykp
Ci0gICAgICAgIHJldHVybiBUeXBlRGVjbGFyYXRpb24oanNvblsnaWQnXSwgdHlwZV9yZWYsIGpz
b24uZ2V0KCJkZXNjcmlwdGlvbiIsICIiKSwgdHlwZV9tZW1iZXJzKQorICAgICAgICBwbGF0Zm9y
bSA9IFBsYXRmb3JtLmZyb21TdHJpbmcoanNvbi5nZXQoJ3BsYXRmb3JtJywgJ2dlbmVyaWMnKSkK
KyAgICAgICAgcmV0dXJuIFR5cGVEZWNsYXJhdGlvbihqc29uWydpZCddLCB0eXBlX3JlZiwganNv
bi5nZXQoImRlc2NyaXB0aW9uIiwgIiIpLCBwbGF0Zm9ybSwgdHlwZV9tZW1iZXJzKQogCiAgICAg
ZGVmIHBhcnNlX3R5cGVfbWVtYmVyKHNlbGYsIGpzb24pOgogICAgICAgICBjaGVja19mb3JfcmVx
dWlyZWRfcHJvcGVydGllcyhbJ25hbWUnXSwganNvbiwgInR5cGUgbWVtYmVyIikKQEAgLTQzNCw3
ICs0MzUsOCBAQCBjbGFzcyBQcm90b2NvbDoKICAgICAgICAgICAgIGlmIGxlbihkdXBsaWNhdGVf
bmFtZXMpID4gMDoKICAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiTWFsZm9y
bWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiByZXR1cm4gcGFyYW1ldGVyIGxpc3QgZm9yIGNvbW1h
bmQgJXMgaGFzIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMiICUganNvblsnbmFtZSddKQogCi0g
ICAgICAgIHJldHVybiBDb21tYW5kKGpzb25bJ25hbWUnXSwgY2FsbF9wYXJhbWV0ZXJzLCByZXR1
cm5fcGFyYW1ldGVycywganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpLCBqc29uLmdldCgnYXN5
bmMnLCBGYWxzZSkpCisgICAgICAgIHBsYXRmb3JtID0gUGxhdGZvcm0uZnJvbVN0cmluZyhqc29u
LmdldCgncGxhdGZvcm0nLCAnZ2VuZXJpYycpKQorICAgICAgICByZXR1cm4gQ29tbWFuZChqc29u
WyduYW1lJ10sIGNhbGxfcGFyYW1ldGVycywgcmV0dXJuX3BhcmFtZXRlcnMsIGpzb24uZ2V0KCdk
ZXNjcmlwdGlvbicsICIiKSwgcGxhdGZvcm0sIGpzb24uZ2V0KCdhc3luYycsIEZhbHNlKSkKIAog
ICAgIGRlZiBwYXJzZV9ldmVudChzZWxmLCBqc29uKToKICAgICAgICAgY2hlY2tfZm9yX3JlcXVp
cmVkX3Byb3BlcnRpZXMoWyduYW1lJ10sIGpzb24sICJldmVudCIpCkBAIC00NTEsNyArNDUzLDgg
QEAgY2xhc3MgUHJvdG9jb2w6CiAgICAgICAgICAgICBpZiBsZW4oZHVwbGljYXRlX25hbWVzKSA+
IDA6CiAgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZvcm1lZCBkb21h
aW4gc3BlY2lmaWNhdGlvbjogcGFyYW1ldGVyIGxpc3QgZm9yIGV2ZW50ICVzIGhhcyBkdXBsaWNh
dGUgcGFyYW1ldGVyIG5hbWVzIiAlIGpzb25bJ25hbWUnXSkKIAotICAgICAgICByZXR1cm4gRXZl
bnQoanNvblsnbmFtZSddLCBldmVudF9wYXJhbWV0ZXJzLCBqc29uLmdldCgnZGVzY3JpcHRpb24n
LCAiIikpCisgICAgICAgIHBsYXRmb3JtID0gUGxhdGZvcm0uZnJvbVN0cmluZyhqc29uLmdldCgn
cGxhdGZvcm0nLCAnZ2VuZXJpYycpKQorICAgICAgICByZXR1cm4gRXZlbnQoanNvblsnbmFtZSdd
LCBldmVudF9wYXJhbWV0ZXJzLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAiIiksIHBsYXRmb3Jt
KQogCiAgICAgZGVmIHBhcnNlX2NhbGxfb3JfcmV0dXJuX3BhcmFtZXRlcihzZWxmLCBqc29uKToK
ICAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWyduYW1lJ10sIGpzb24sICJw
YXJhbWV0ZXIiKQpAQCAtNDcxLDcgKzQ3NCw3IEBAIGNsYXNzIFByb3RvY29sOgogCiAgICAgICAg
ICMgR2F0aGVyIHF1YWxpZmllZCB0eXBlIG5hbWVzIGZyb20gdHlwZSBkZWNsYXJhdGlvbnMgaW4g
ZWFjaCBkb21haW4uCiAgICAgICAgIGZvciBkb21haW4gaW4gc2VsZi5kb21haW5zOgotICAgICAg
ICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAg
ICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4uYWxsX3R5cGVfZGVjbGFyYXRpb25zKCk6
CiAgICAgICAgICAgICAgICAgIyBCYXNpYyBzYW5pdHkgY2hlY2tpbmcuCiAgICAgICAgICAgICAg
ICAgaWYgZGVjbGFyYXRpb24udHlwZV9yZWYucmVmZXJlbmNlZF90eXBlX25hbWUgaXMgbm90IE5v
bmU6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVjaGVja0V4Y2VwdGlvbigiVHlwZSBk
ZWNsYXJhdGlvbnMgbXVzdCBuYW1lIGEgYmFzZSB0eXBlLCBub3QgYSB0eXBlIHJlZmVyZW5jZS4i
KQpAQCAtNTU1LDIxICs1NTgsMzAgQEAgY2xhc3MgRG9tYWluOgogICAgICAgICBzZWxmLmZlYXR1
cmVfZ3VhcmQgPSBmZWF0dXJlX2d1YXJkCiAgICAgICAgIHNlbGYuYXZhaWxhYmlsaXR5ID0gYXZh
aWxhYmlsaXR5CiAgICAgICAgIHNlbGYuaXNfc3VwcGxlbWVudGFsID0gaXNTdXBwbGVtZW50YWwK
LSAgICAgICAgc2VsZi50eXBlX2RlY2xhcmF0aW9ucyA9IHR5cGVfZGVjbGFyYXRpb25zCi0gICAg
ICAgIHNlbGYuY29tbWFuZHMgPSBjb21tYW5kcwotICAgICAgICBzZWxmLmV2ZW50cyA9IGV2ZW50
cworICAgICAgICBzZWxmLl90eXBlX2RlY2xhcmF0aW9ucyA9IHR5cGVfZGVjbGFyYXRpb25zCisg
ICAgICAgIHNlbGYuX2NvbW1hbmRzID0gY29tbWFuZHMKKyAgICAgICAgc2VsZi5fZXZlbnRzID0g
ZXZlbnRzCisKKyAgICBkZWYgYWxsX3R5cGVfZGVjbGFyYXRpb25zKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5fdHlwZV9kZWNsYXJhdGlvbnMKKworICAgIGRlZiBhbGxfY29tbWFuZHMoc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLl9jb21tYW5kcworCisgICAgZGVmIGFsbF9ldmVudHMo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9ldmVudHMKIAogICAgIGRlZiByZXNvbHZlX3R5
cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCk6CiAgICAgICAgIGxvZy5kZWJ1ZygiPiBSZXNv
bHZpbmcgdHlwZSBkZWNsYXJhdGlvbnMgZm9yIGRvbWFpbjogJXMiICUgc2VsZi5kb21haW5fbmFt
ZSkKLSAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIHNlbGYudHlwZV9kZWNsYXJhdGlvbnM6Cisg
ICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBzZWxmLl90eXBlX2RlY2xhcmF0aW9uczoKICAgICAg
ICAgICAgIGRlY2xhcmF0aW9uLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHByb3RvY29sLCBzZWxm
KQogCiAgICAgICAgIGxvZy5kZWJ1ZygiPiBSZXNvbHZpbmcgdHlwZXMgaW4gY29tbWFuZHMgZm9y
IGRvbWFpbjogJXMiICUgc2VsZi5kb21haW5fbmFtZSkKLSAgICAgICAgZm9yIGNvbW1hbmQgaW4g
c2VsZi5jb21tYW5kczoKKyAgICAgICAgZm9yIGNvbW1hbmQgaW4gc2VsZi5fY29tbWFuZHM6CiAg
ICAgICAgICAgICBjb21tYW5kLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHByb3RvY29sLCBzZWxm
KQogCiAgICAgICAgIGxvZy5kZWJ1ZygiPiBSZXNvbHZpbmcgdHlwZXMgaW4gZXZlbnRzIGZvciBk
b21haW46ICVzIiAlIHNlbGYuZG9tYWluX25hbWUpCi0gICAgICAgIGZvciBldmVudCBpbiBzZWxm
LmV2ZW50czoKKyAgICAgICAgZm9yIGV2ZW50IGluIHNlbGYuX2V2ZW50czoKICAgICAgICAgICAg
IGV2ZW50LnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHByb3RvY29sLCBzZWxmKQogCiAKQEAgLTU3
OCwxMCArNTkwLDExIEBAIGNsYXNzIERvbWFpbnM6CiAKIAogY2xhc3MgVHlwZURlY2xhcmF0aW9u
OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlX25hbWUsIHR5cGVfcmVmLCBkZXNjcmlwdGlv
biwgdHlwZV9tZW1iZXJzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV9uYW1lLCB0eXBl
X3JlZiwgZGVzY3JpcHRpb24sIHBsYXRmb3JtLCB0eXBlX21lbWJlcnMpOgogICAgICAgICBzZWxm
LnR5cGVfbmFtZSA9IHR5cGVfbmFtZQogICAgICAgICBzZWxmLnR5cGVfcmVmID0gdHlwZV9yZWYK
ICAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCisgICAgICAgIHNlbGYucGxh
dGZvcm0gPSBwbGF0Zm9ybQogICAgICAgICBzZWxmLnR5cGVfbWVtYmVycyA9IHR5cGVfbWVtYmVy
cwogCiAgICAgICAgIGlmIHNlbGYudHlwZV9uYW1lICE9IHVjZmlyc3Qoc2VsZi50eXBlX25hbWUp
OgpAQCAtNjI1LDExICs2MzgsMTIgQEAgY2xhc3MgUGFyYW1ldGVyOgogCiAKIGNsYXNzIENvbW1h
bmQ6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmRfbmFtZSwgY2FsbF9wYXJhbWV0ZXJz
LCByZXR1cm5fcGFyYW1ldGVycywgZGVzY3JpcHRpb24sIGlzX2FzeW5jKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgY29tbWFuZF9uYW1lLCBjYWxsX3BhcmFtZXRlcnMsIHJldHVybl9wYXJhbWV0
ZXJzLCBkZXNjcmlwdGlvbiwgcGxhdGZvcm0sIGlzX2FzeW5jKToKICAgICAgICAgc2VsZi5jb21t
YW5kX25hbWUgPSBjb21tYW5kX25hbWUKICAgICAgICAgc2VsZi5jYWxsX3BhcmFtZXRlcnMgPSBj
YWxsX3BhcmFtZXRlcnMKICAgICAgICAgc2VsZi5yZXR1cm5fcGFyYW1ldGVycyA9IHJldHVybl9w
YXJhbWV0ZXJzCiAgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgorICAgICAg
ICBzZWxmLnBsYXRmb3JtID0gcGxhdGZvcm0KICAgICAgICAgc2VsZi5pc19hc3luYyA9IGlzX2Fz
eW5jCiAKICAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRv
bWFpbik6CkBAIC02NDMsMTAgKzY1NywxMSBAQCBjbGFzcyBDb21tYW5kOgogCiAKIGNsYXNzIEV2
ZW50OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBldmVudF9uYW1lLCBldmVudF9wYXJhbWV0ZXJz
LCBkZXNjcmlwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV2ZW50X25hbWUsIGV2ZW50
X3BhcmFtZXRlcnMsIGRlc2NyaXB0aW9uLCBwbGF0Zm9ybSk6CiAgICAgICAgIHNlbGYuZXZlbnRf
bmFtZSA9IGV2ZW50X25hbWUKICAgICAgICAgc2VsZi5ldmVudF9wYXJhbWV0ZXJzID0gZXZlbnRf
cGFyYW1ldGVycwogICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KKyAgICAg
ICAgc2VsZi5wbGF0Zm9ybSA9IHBsYXRmb3JtCiAKICAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVy
ZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRvbWFpbik6CiAgICAgICAgIGxvZy5kZWJ1ZygiPj4gUmVz
b2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBmb3IgcGFyYW1ldGVycyBpbiBldmVudDogJXMiICUgc2Vs
Zi5ldmVudF9uYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvci5weQppbmRleCA3OWMw
NWY0OTMzODI3NTAzNmIzMjllNWQ5ZTM5YWMxYTliZjNjZjExLi4yYmU4NDVlNmJlYTg2NGFhMGIy
YWYzYzRkNWRhNzk4M2EyYTEzMTcyIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvci5weQorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvci5w
eQpAQCAtMTIwLDM0ICsxMjAsMzcgQEAgY2xhc3MgT2JqQ0dlbmVyYXRvcihHZW5lcmF0b3IpOgog
CiAgICAgRE9NQUlOU19UT19HRU5FUkFURSA9IFsnQ1NTJywgJ0RPTScsICdET01TdG9yYWdlJywg
J05ldHdvcmsnLCAnUGFnZScsICdBdXRvbWF0aW9uJywgJ0dlbmVyaWNUeXBlcyddCiAKLSAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fdHlwZXNfZmlsdGVy
KG1vZGVsKToKLSAgICAgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fdHlwZXMoZG9tYWlu
KToKLSAgICAgICAgICAgIGlmIG1vZGVsLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLlRlc3Q6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgICAgIHdoaXRlbGlzdCA9IHNldChP
YmpDR2VuZXJhdG9yLkRPTUFJTlNfVE9fR0VORVJBVEUpCi0gICAgICAgICAgICB3aGl0ZWxpc3Qu
dXBkYXRlKHNldChbJ0NvbnNvbGUnLCAnRGVidWdnZXInLCAnUnVudGltZSddKSkKLSAgICAgICAg
ICAgIHJldHVybiBkb21haW4uZG9tYWluX25hbWUgaW4gd2hpdGVsaXN0Ci0gICAgICAgIHJldHVy
biBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVzCisgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV90
eXBlc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGlmIG5vdCBsZW4oc2VsZi50
eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbikpOgorICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21h
aW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRlcihtb2RlbCk6Ci0gICAgICAgIGRlZiBzaG91bGRfZ2Vu
ZXJhdGVfZG9tYWluX2NvbW1hbmRfaGFuZGxlcihkb21haW4pOgotICAgICAgICAgICAgaWYgbW9k
ZWwuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuVGVzdDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
VHJ1ZQotICAgICAgICAgICAgd2hpdGVsaXN0ID0gc2V0KE9iakNHZW5lcmF0b3IuRE9NQUlOU19U
T19HRU5FUkFURSkKLSAgICAgICAgICAgIHJldHVybiBkb21haW4uZG9tYWluX25hbWUgaW4gd2hp
dGVsaXN0Ci0gICAgICAgIHJldHVybiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1hbmRfaGFu
ZGxlcgorICAgICAgICBpZiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuVGVz
dDoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVm
IHNob3VsZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIobW9kZWwpOgot
ICAgICAgICBkZWYgc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyKGRvbWFp
bik6Ci0gICAgICAgICAgICBpZiBtb2RlbC5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5UZXN0Ogot
ICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgICAgICB3aGl0ZWxpc3QgPSBzZXQo
T2JqQ0dlbmVyYXRvci5ET01BSU5TX1RPX0dFTkVSQVRFKQotICAgICAgICAgICAgd2hpdGVsaXN0
LmFkZCgnQ29uc29sZScpCi0gICAgICAgICAgICByZXR1cm4gZG9tYWluLmRvbWFpbl9uYW1lIGlu
IHdoaXRlbGlzdAotICAgICAgICByZXR1cm4gc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVudF9k
aXNwYXRjaGVyCisgICAgICAgIHdoaXRlbGlzdCA9IHNldChPYmpDR2VuZXJhdG9yLkRPTUFJTlNf
VE9fR0VORVJBVEUpCisgICAgICAgIHdoaXRlbGlzdC51cGRhdGUoc2V0KFsnQ29uc29sZScsICdE
ZWJ1Z2dlcicsICdSdW50aW1lJ10pKQorICAgICAgICByZXR1cm4gZG9tYWluLmRvbWFpbl9uYW1l
IGluIHdoaXRlbGlzdAorCisgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9jb21tYW5kc19mb3JfZG9t
YWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGlmIG5vdCBsZW4oc2VsZi5jb21tYW5kc19mb3Jf
ZG9tYWluKGRvbWFpbikpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYg
c2VsZi5tb2RlbCgpLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLlRlc3Q6CisgICAgICAgICAgICBy
ZXR1cm4gVHJ1ZQorCisgICAgICAgIHdoaXRlbGlzdCA9IHNldChPYmpDR2VuZXJhdG9yLkRPTUFJ
TlNfVE9fR0VORVJBVEUpCisgICAgICAgIHJldHVybiBkb21haW4uZG9tYWluX25hbWUgaW4gd2hp
dGVsaXN0CisKKyAgICBkZWYgc2hvdWxkX2dlbmVyYXRlX2V2ZW50c19mb3JfZG9tYWluKHNlbGYs
IGRvbWFpbik6CisgICAgICAgIGlmIG5vdCBsZW4oc2VsZi5ldmVudHNfZm9yX2RvbWFpbihkb21h
aW4pKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIHNlbGYubW9kZWwo
KS5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5UZXN0OgorICAgICAgICAgICAgcmV0dXJuIFRydWUK
KworICAgICAgICB3aGl0ZWxpc3QgPSBzZXQoT2JqQ0dlbmVyYXRvci5ET01BSU5TX1RPX0dFTkVS
QVRFKQorICAgICAgICB3aGl0ZWxpc3QuYWRkKCdDb25zb2xlJykKKyAgICAgICAgcmV0dXJuIGRv
bWFpbi5kb21haW5fbmFtZSBpbiB3aGl0ZWxpc3QKIAogICAgICMgT2JqQyBlbnVtIGFuZCB0eXBl
IG5hbWVzLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvYWxsL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxsL2RlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODE3ZjEzNWVlNWE3MjA5N2FlM2Ux
MzFiZGQ0MGU2MDE2OThhYjEwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9hbGwvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbgpAQCAtMCwwICsxLDI4IEBACit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrIiwK
KyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJOZXR3b3JrRXJy
b3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwbGF0Zm9y
bSI6ICJtYWNvcyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAi
RXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5
cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQorICAgICAgICAg
ICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZSIsCisgICAgICAgICAgICAicGxhdGZvcm0i
OiAibWFjb3MiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2Ug
aW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBj
cm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfQorICAgIF0sCisgICAgImV2ZW50cyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAicmVzb3VyY2VMb2FkZWQiLAorICAgICAg
ICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJB
IHJlc291cmNlIHdhcyBsb2FkZWQuIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9leHBlY3Rl
ZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9hbGwvZXhwZWN0ZWQvZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmYzNDhmMmE4YTVm
OTlkNTRhMGM1MjQ0NTQ1NmI0OWY2NzY3YjQ1YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9hbGwvZXhwZWN0ZWQvZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMTcyIEBACisj
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBOZXR3b3JrLgor
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck5ldHdvcmtEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiTmV0
d29yayIpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJOZXR3b3JrLnJlc291cmNl
TG9hZGVkIiwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsu
bG9hZFJlc291cmNlIiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4o
Ik5ldHdvcmsiKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5k
RGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2Jh
Y2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3Bh
dGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBt
X2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCitjbGFzcyBBbHRlcm5hdGVOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGlj
OgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBjYWxsSWQpID0gMDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCitjbGFzcyBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIE5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBs
b2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgTmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4g
Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworcHJpdmF0ZToK
KyAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJu
YXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAg
QWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIg
eyBudWxscHRyIH07CisjZW5kaWYKK3ByaXZhdGU6CisgICAgTmV0d29ya0JhY2tlbmREaXNwYXRj
aGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OworICAgIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRy
IH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK05ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5OZXR3b3JrQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IE5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RGlzcGF0Y2hlciwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmRE
aXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIs
IE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFn
ZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRv
bWFpbihBU0NJSUxpdGVyYWwoIk5ldHdvcmsiKSwgdGhpcyk7Cit9CisKK3ZvaWQgTmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8TmV0d29y
a0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291
cmNlIikKKyAgICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJz
KSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcn
LCAiTmV0d29yayIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOworfQorCit2b2lk
IE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UocmVxdWVzdElkKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAg
UmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBX
VEZNb3ZlKGVycm9yKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworY2xhc3MgTmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hl
ciB7CitwdWJsaWM6CisgICAgTmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRl
ciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9
CisgICAgdm9pZCByZXNvdXJjZUxvYWRlZCgpOworcHJpdmF0ZToKKyAgICBGcm9udGVuZFJvdXRl
ciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMj
IEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit2b2lkIE5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXI6OnJlc291cmNlTG9h
ZGVkKCkKK3sKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiKSk7CisK
KyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworLy8gRm9yd2FyZCBkZWNs
YXJhdGlvbnMuCituYW1lc3BhY2UgTmV0d29yayB7CitjbGFzcyBOZXR3b3JrRXJyb3I7Cit9IC8v
IE5ldHdvcmsKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisKKworbmFtZXNw
YWNlIE5ldHdvcmsgeworY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRz
U2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29kZVNldCA9
IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisK
KyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0
YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRl
cihSZWY8LypOZXR3b3JrRXJyb3IqL0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAg
ICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtF
cnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+
JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9h
bHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgibWVzc2FnZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3Nh
Z2VTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4m
IHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJjb2RlIiksIHZhbHVlKTsK
KyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisg
ICAgICAgIFJlZjxOZXR3b3JrRXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0g
c2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAg
ICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxOZXR3b3JrRXJy
b3I+Kj4oJnJlc3VsdCkpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3lu
dGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxOZXR3b3JrRXJyb3I+IHJlc3VsdCA9IE5l
dHdvcmtFcnJvcjo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQorICAgICAq
ICAgICAuc2V0Q29kZSguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAg
c3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1
cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAg
fQorfTsKKworfSAvLyBOZXR3b3JrCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVz
cGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcjsKKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlz
cGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIg
eworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoaWQ8
VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9
IGhhbmRsZXI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElk
KSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbE5ldHdv
cmtEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
clZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9y
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpCit7
CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxi
YWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfTsKKworICAgIFttX2RlbGVn
YXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVj
dAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmtIYW5kbGVy
OikgaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+IG5ldHdvcmtIYW5kbGVyOwor
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWlu
RXZlbnREaXNwYXRjaGVyICpuZXR3b3JrRXZlbnREaXNwYXRjaGVyOworQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVy
PiBfbmV0d29ya0hhbmRsZXI7CisgICAgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlz
cGF0Y2hlciAqX25ldHdvcmtFdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJv
bGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9
IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworewor
ICAgIFtfbmV0d29ya0hhbmRsZXIgcmVsZWFzZV07CisgICAgW19uZXR3b3JrRXZlbnREaXNwYXRj
aGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXROZXR3
b3JrSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIK
K3sKKyAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29ya0hhbmRsZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIFtfbmV0d29ya0hhbmRsZXIgcmVsZWFzZV07CisgICAgX25ldHdvcmtIYW5kbGVyID0g
W2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IHN0ZDo6
bWFrZV91bmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxl
cik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IHN0ZDo6bWFrZV91bmlxdWU8QWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXI+PihBU0NJSUxpdGVyYWwoIk5ldHdvcmsiKSwgKl9jb250cm9s
bGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBw
ZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQ
cm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiluZXR3b3JrSGFuZGxlcgoreworICAgIHJldHVy
biBfbmV0d29ya0hhbmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVu
dERpc3BhdGNoZXIgKiluZXR3b3JrRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFfbmV0d29y
a0V2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX25ldHdvcmtFdmVudERpc3BhdGNoZXIgPSBbW1Rl
c3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29u
dHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9uZXR3b3JrRXZlbnREaXNwYXRjaGVy
OworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
K0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVy
Cit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30K
KworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiljb250cm9sbGVyOworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVy
KTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpcmVzb3VyY2VMb2FkZWQKK3sKKyAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91
dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CisKKyAgICBSZWY8SW5zcGVjdG9y
T2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAganNv
bk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwo
Ik5ldHdvcmsucmVzb3VyY2VMb2FkZWQiKSk7CisgICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgVGVzdFByb3RvY29s
TmV0d29ya0Vycm9yOworCisKKworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29ya0Vycm9yIDogUldJUHJvdG9jb2xK
U09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8
TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05P
YmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7Cisv
KiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3Nh
Z2U7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29k
ZTsKK0BlbmQKKworQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyIDxO
U09iamVjdD4KK0ByZXF1aXJlZAorLSAodm9pZClsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFj
azoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNr
Oih2b2lkKF4pKCkpc3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29ya0RvbWFp
bkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKXJlc291cmNlTG9hZGVkOworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29ya0Rv
bWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250
cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlD
b252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgT2JqQ0VudW1UeXBlPgorT2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5l
dHdvcmtEb21haW4pCisKKysgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xO
ZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29ya0Rv
bWFpbikKKworKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmtF
cnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAg
ICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sTmV0d29ya0Vycm9yIGFsbG9jXSBpbml0V2l0aFBh
eWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgor
Cit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xOZXR3b3JrRXJyb3IKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9u
bnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1l
c3NhZ2UiKTsKKyAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOworCisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBA
ImNvZGUiKTsKKyAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVd
OworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Cit7CisgICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rv
ck9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxm
OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3Nh
Z2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdl
OworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9p
ZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5n
Om1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UK
K3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAo
dm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9y
S2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29kZQoreworICAgIHJldHVybiBbc3VwZXIgaW50
ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxN2YxMzVl
ZTVhNzIwOTdhZTNlMTMxYmRkNDBlNjAxNjk4YWIxMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCkBAIC0wLDAgKzEsMjggQEAKK3sKKyAgICAiZG9t
YWluIjogIk5ldHdvcmsiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAg
ImlkIjogIk5ldHdvcmtFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAg
ICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjog
WworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIs
ICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNv
ZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21tYW5kcyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwKKyAgICAg
ICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
TG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0
ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9CisgICAgXSwK
KyAgICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJj
ZUxvYWRlZCIsCisgICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAorICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkEgcmVzb3VyY2Ugd2FzIGxvYWRlZC4iCisgICAgICAgIH0KKyAgICBd
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29u
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0
CmluZGV4IDZkNWM0NGM1YjkwZTA1NDFkZTYxMmMzMWVmNGE0MmVmODY4NWVjNDUuLmE4NzA4MzQ5
ZTQyZDU2N2UyYzg4N2RiOWUwYzc3YzgzODZmMzQ2NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1h
bmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRz
LXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CkBAIC04NzQsMTM1ICs4NzQsNiBAQCBw
cml2YXRlOgogCiAjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
CiAKLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0
Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQot
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2Nv
bERhdGFiYXNlRG9tYWluSGFuZGxlcj4gX2RhdGFiYXNlSGFuZGxlcjsKLX0KLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Kiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250
cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFs
bG9jCi17Ci0gICAgW19kYXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxs
b2NdOwotfQotCi0tICh2b2lkKXNldERhdGFiYXNlSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRGF0
YWJhc2VEb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2RhdGFi
YXNlSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW19kYXRhYmFzZUhhbmRsZXIgcmVs
ZWFzZV07Ci0gICAgX2RhdGFiYXNlSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBh
dXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iakNJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFn
ZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPj4o
QVNDSUlMaXRlcmFsKCJEYXRhYmFzZSIpLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRl
RGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUo
YWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5I
YW5kbGVyPilkYXRhYmFzZUhhbmRsZXIKLXsKLSAgICByZXR1cm4gX2RhdGFiYXNlSGFuZGxlcjsK
LX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDog
TlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREYXRhYmFz
ZUhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGRhdGFiYXNl
SGFuZGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAotCiAjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCkBAIC0xMjA0LDYgKzEwNzUsMTM1IEBAIHZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgaW50CiAKICMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCiAKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHBy
b3BlcnR5IChub25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldERhdGFiYXNlSGFuZGxlcjopIGlk
PFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gZGF0YWJhc2VIYW5kbGVyOworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbERhdGFiYXNl
RG9tYWluSGFuZGxlcj4gX2RhdGFiYXNlSGFuZGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9s
bGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0g
Y29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7Cisg
ICAgW19kYXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQor
CistICh2b2lkKXNldERhdGFiYXNlSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21h
aW5IYW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gX2RhdGFiYXNlSGFuZGxl
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19kYXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07Cisg
ICAgX2RhdGFiYXNlSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVy
bmF0ZURpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iakNJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gc3Rk
OjptYWtlX3VuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyLCBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPj4oQVNDSUlMaXRl
cmFsKCJEYXRhYmFzZSIpLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hl
cikpOworICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRl
QWdlbnQpKTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPilk
YXRhYmFzZUhhbmRsZXIKK3sKKyAgICByZXR1cm4gX2RhdGFiYXNlSGFuZGxlcjsKK30KKworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCiAjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQogLyoKICAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtMTI0NCw4
ICsxMjQ0LDYgQEAgdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQKIHVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CiAKIAotCi0KICMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVy
cy5tbQogCiAjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5q
c29uLXJlc3VsdAppbmRleCAyZTIxMzkzZGQ1N2ZmZWI0ZjZjZTEwNDNjM2ExNDVkNjcyZDAwY2Fh
Li42NGI4ZGE2NzFlNWYzM2Q3NjVhNzBlNWY4Y2MxMDAxYjJkYmM5MjkxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1y
ZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJh
bWV0ZXJzLmpzb24tcmVzdWx0CkBAIC03NzMsMTM1ICs3NzMsNiBAQCBwcml2YXRlOgogCiAjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCiAKLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9j
b2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IF9kYXRhYmFzZUhhbmRsZXI7Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxm
KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVh
bGxvYwotewotICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFs
bG9jXTsKLX0KLQotLSAodm9pZClzZXREYXRhYmFzZUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERh
dGFiYXNlRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9kYXRh
YmFzZUhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJl
bGVhc2VdOwotICAgIF9kYXRhYmFzZUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAg
YXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxPYmpDSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVB
Z2VudCA9IHN0ZDo6bWFrZV91bmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4+
KEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0
ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3Zl
KGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWlu
SGFuZGxlcj4pZGF0YWJhc2VIYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9kYXRhYmFzZUhhbmRsZXI7
Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
bW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1y
ZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwg
c2V0dGVyPXNldERhdGFiYXNlSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWlu
SGFuZGxlcj4gZGF0YWJhc2VIYW5kbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCi0KICMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMubW0KIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTEwNjEsNiArOTMyLDEzNSBAQCB2b2lkIE9iakNJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMobG9uZyByZQogCiAjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQogCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxs
LXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWlu
LCBzZXR0ZXI9c2V0RGF0YWJhc2VIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21h
aW5IYW5kbGVyPiBkYXRhYmFzZUhhbmRsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
cy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFu
ZGxlcj4gX2RhdGFiYXNlSGFuZGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7Cisg
ICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxl
cjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19kYXRh
YmFzZUhhbmRsZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lk
KXNldERhdGFiYXNlSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVy
PiloYW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gX2RhdGFiYXNlSGFuZGxlcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgW19kYXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07CisgICAgX2RhdGFi
YXNlSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3Bh
dGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gc3RkOjptYWtlX3Vu
aXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
LCBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPj4oQVNDSUlMaXRlcmFsKCJEYXRh
YmFzZSIpLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAg
IF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsK
K30KKworLSAoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPilkYXRhYmFzZUhh
bmRsZXIKK3sKKyAgICByZXR1cm4gX2RhdGFiYXNlSGFuZGxlcjsKK30KKworQGVuZAorCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCiAjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtMTEwMSw4ICsxMTAxLDYg
QEAgdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmUKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAK
IAotCi0KICMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQogCiAj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGZhZGJhN2I3NDU0NDgzZDc0
MDllYTY2N2RlNzZkYWI5ZTZlNGRmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsODM1IEBACisjIyMg
QmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgi
CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1
YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0
Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3Bh
dGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29u
c3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBS
ZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKwor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
I2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
IyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworCisK
KworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVz
cGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29s
Lmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
KiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjoo
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
QVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2Nd
OworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKwor
CisKKworCisKKworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPYmpDRW51bVR5
cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxh
dGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQ
YXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW1wb3J0IDx3
dGYvQXNzZXJ0aW9ucy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbnMt
d2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW5zLXdp
dGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0CmluZGV4IDk4ZTFjZTYyMDRkY2M3
YTdjN2VhNWEwZDk2NTdhODgyOTlkZWMwMzYuLjg2MWJhMDQ4Y2RmMzRjYTQxNDFiNmQxNGJjMTk1
YTZiOWQ4NjRlY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29t
bWFuZC1zaXplcy5qc29uLXJlc3VsdApAQCAtNzQ1LDggKzc0NSw2IEBAIHByaXZhdGU6CiAgICAg
UmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdh
dGU7CiB9OwogCi0KLQogY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciB7CiBw
dWJsaWM6CiAgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVz
dFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBo
YW5kbGVyOyB9CkBAIC03NjUsNyArNzYzLDcgQEAgcHJpdmF0ZToKIAogIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAogCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5tbQorIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNzk3LDgxICs3OTUsMTMxIEBAIHByaXZhdGU6CiAv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CiAKICNpbXBvcnQgImNvbmZp
Zy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgogI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVB
Z2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVycy5oPgogCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworI2luY2x1ZGUg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CiAK
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkKIHsKLSAgICBBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9t
YWluSGFuZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xOZXR3b3Jr
M0RvbWFpbkhhbmRsZXI+IF9uZXR3b3JrM0hhbmRsZXI7CisgICAgaWQgZXJyb3JDYWxsYmFjayA9
IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTFXaXRoRXJy
b3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2td
OwogfQogCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkKIHsKLSAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVy
OwotICAgIHJldHVybiBzZWxmOworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICpl
cnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9y
KHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKwor
ICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAg
IH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotLSAodm9p
ZClkZWFsbG9jCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKQogewotICAgIFtfbmV0d29yazFIYW5kbGVyIHJl
bGVhc2VdOwotICAgIFtfbmV0d29yazNIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFs
bG9jXTsKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNz
Q2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9OworCisgICAgW21f
ZGVsZWdhdGUgbG9hZFJlc291cmNlMldpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CiB9CiAKLS0gKHZvaWQpc2V0TmV0d29yazFI
YW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3Zv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMo
bG9uZyByZXF1ZXN0SWQpCiB7Ci0gICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmsxSGFuZGxlcikK
LSAgICAgICAgcmV0dXJuOworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJv
cikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKIAotICAg
IFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOwotICAgIF9uZXR3b3JrMUhhbmRsZXIgPSBbaGFu
ZGxlciByZXRhaW5dOworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCkpOworICAgIH07CiAKLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPihoYW5k
bGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudDxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPj4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrMSIpLCAqX2Nv
bnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVy
LT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKKyAgICBbbV9kZWxl
Z2F0ZSBsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNz
Q2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotLSAoaWQ8VGVzdFByb3RvY29sTmV0d29y
azFEb21haW5IYW5kbGVyPiluZXR3b3JrMUhhbmRsZXIKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQpCiB7Ci0g
ICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNT
dHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9y
KTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAg
ICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwogfQog
Ci0tICh2b2lkKXNldE5ldHdvcmszSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21h
aW5IYW5kbGVyPiloYW5kbGVyCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKQogewotICAgIGlmIChoYW5kbGVy
ID09IF9uZXR3b3JrM0hhbmRsZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBpZCBlcnJvckNhbGxi
YWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOworICAgIH07CiAKLSAgICBbX25ldHdvcmszSGFuZGxlciByZWxlYXNlXTsKLSAgICBf
bmV0d29yazNIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKyAgICBpZCBzdWNjZXNzQ2FsbGJh
Y2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9OwogCi0gICAgYXV0byBhbHRl
cm5hdGVEaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IHN0
ZDo6bWFrZV91bmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4+KEFTQ0lJTGl0
ZXJhbCgiTmV0d29yazMiKSwgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNo
ZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0
ZUFnZW50KSk7CisgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlNVdpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CiB9CiAKLS0g
KGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4pbmV0d29yazNIYW5kbGVyCit2
b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2
KGxvbmcgcmVxdWVzdElkKQogewotICAgIHJldHVybiBfbmV0d29yazNIYW5kbGVyOworICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2Fk
UmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotQGVuZAordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
eworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9OwogCisgICAgW21fZGVsZWdhdGUgbG9h
ZFJlc291cmNlN1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNr
OnN1Y2Nlc3NDYWxsYmFja107Cit9CiAKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KIAogIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAogLyoKQEAgLTkxNSw3ICs5NjMsNyBAQCBfX2F0dHJpYnV0
ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKIAogIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKIAotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQorIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
bW0KIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KQEAgLTk0NywxMzMgKzk5NSw4MSBAQCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
ICgiZGVmYXVsdCIpKSkKIC8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
IAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJ
bnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVx
dWVzdElkKQotewotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1
Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH07Ci0KLSAg
ICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQorI2ltcG9ydCAiVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oIgogCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgogCit1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKQorQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KIHsKLSAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMVdpdGhF
cnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
a107CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAg
ICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IF9uZXR3b3JrMUhhbmRsZXI7
CisgICAgaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiBfbmV0d29yazNIYW5k
bGVyOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCiB7Ci0g
ICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNr
ID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRl
IGxvYWRSZXNvdXJjZTJXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2tdOworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYg
KCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAg
ICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7CiB9CiAKLXZvaWQg
T2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMobG9u
ZyByZXF1ZXN0SWQpCistICh2b2lkKWRlYWxsb2MKIHsKLSAgICBpZCBlcnJvckNhbGxiYWNrID0g
XihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
ZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlM1dpdGhFcnJv
ckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107
CisgICAgW19uZXR3b3JrMUhhbmRsZXIgcmVsZWFzZV07CisgICAgW19uZXR3b3JrM0hhbmRsZXIg
cmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkKQor
LSAodm9pZClzZXROZXR3b3JrMUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWlu
SGFuZGxlcj4paGFuZGxlcgogewotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICpl
cnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9y
KHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKKyAg
ICBpZiAoaGFuZGxlciA9PSBfbmV0d29yazFIYW5kbGVyKQorICAgICAgICByZXR1cm47CiAKLSAg
ICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9
OworICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOworICAgIF9uZXR3b3JrMUhhbmRsZXIg
PSBbaGFuZGxlciByZXRhaW5dOwogCi0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlNFdpdGhF
cnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
a107CisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxPYmpD
SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBh
bHRlcm5hdGVBZ2VudCA9IHN0ZDo6bWFrZV91bmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQ8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcj4+KEFTQ0lJTGl0ZXJhbCgiTmV0d29yazEiKSwgKl9jb250cm9sbGVyLCBXVEZNb3Zl
KGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2Vu
dChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7CiB9CiAKLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQpCistIChp
ZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+KW5ldHdvcmsxSGFuZGxlcgogewot
ICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFj
ayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0
ZSBsb2FkUmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKKyAgICByZXR1cm4gX25ldHdvcmsxSGFuZGxlcjsKIH0K
IAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291
cmNlNihsb25nIHJlcXVlc3RJZCkKKy0gKHZvaWQpc2V0TmV0d29yazNIYW5kbGVyOihpZDxUZXN0
UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIKIHsKLSAgICBpZCBlcnJvckNh
bGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGlu
Z0Vycm9ycygpOwotICAgIH07CisgICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmszSGFuZGxlcikK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKSk7Ci0gICAgfTsKKyAgICBbX25ldHdvcmszSGFuZGxlciByZWxlYXNlXTsK
KyAgICBfbmV0d29yazNIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKIAotICAgIFttX2RlbGVn
YXRlIGxvYWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9
IHN0ZDo6bWFrZV91bmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+
KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFs
dGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIsIEFsdGVy
bmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+PihBU0NJSUxpdGVyYWwoIk5ldHdvcmszIiks
ICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2NvbnRy
b2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwogfQogCi12
b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3
KGxvbmcgcmVxdWVzdElkKQorLSAoaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVy
PiluZXR3b3JrM0hhbmRsZXIKIHsKLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAq
ZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0K
LSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKLSAg
ICB9OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlN1dpdGhFcnJvckNhbGxiYWNrOmVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CisgICAgcmV0dXJu
IF9uZXR3b3JrM0hhbmRsZXI7CiB9CiAKK0BlbmQKIAotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CiAKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KIAogIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KIC8qCkBAIC0xMTE1LDEyICsxMTExLDYg
QEAgdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291
cmNlNyhsb25nIHJlcXVlc3RJZCkKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIAotCi0K
LQotCi0KLQogIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCiAK
ICMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaApAQCAtMTI2OCwxMCArMTI1OCw2IEBAIE9i
akNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAKIAog
Ci0KLQotCi0KIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgogCiAjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCkBAIC0xMzE2LDIxICsxMzAyLDEyIEBAIE9iakNFbnVt
VHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAKIHVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CiAKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChOZXR3b3JrMURvbWFpbikKLQotQGVuZAogQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMgKE5ldHdvcmsyRG9tYWluKQogCiArICh2b2lkKV9wYXJzZUxvYWRlcklkOihO
U1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKIAogQGVuZAotQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmszRG9tYWluKQogCi1A
ZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdv
cmsxRG9tYWluKQotCi1AZW5kCiBAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChOZXR3b3JrMkRvbWFpbikKIAogKyAodm9pZClfcGFyc2VMb2FkZXJJZDooTlNTdHJp
bmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKQEAgLTEzNDAsOSArMTMxNyw2
IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiB9CiAKIEBlbmQKLUBpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmszRG9tYWluKQotCi1AZW5kCiAK
IAogIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KQEAgLTEzOTEs
OCArMTM2NSw0IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIAogCi0KLQotCi0KICMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2VudW0t
dmFsdWVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKaW5kZXgg
ZmEwNTUzYzgwZWE3NzNjYjU2YzVlNWZjOTkyYTI2ODM4NTVjNTUzYi4uYTA4OGQ0MTUzYWMxOTA2
MDJmNTk2ZDA2ZDUwMGQwZmQxMWNiYjlkMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZW51bS12YWx1ZXMu
anNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKQEAgLTYxMCw4
ICs2MTAsNiBAQCBzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46
OlR5cGVEb21haW5FbnVtPiBwYXJzZUVudW1WYWx1ZUZybwogbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKIAotCi0KIGNsYXNzIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
IHsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7
IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CkBAIC02MjAsMTMgKzYxOCwxMSBAQCBwcml2YXRlOgog
ICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4+
IG1fZGVsZWdhdGU7CiB9OwogCi0KLQogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCiAKICMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKIAotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTY1OCw3MCArNjU0LDM0IEBAIHBy
aXZhdGU6CiAvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CiAKICNpbXBv
cnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgogI2ltcG9ydCAiVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNw
YXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3Rv
Y29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+IF9jb21tYW5kRG9tYWluSGFuZGxlcjsKLSAg
ICBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2V2ZW50RG9t
YWluRXZlbnREaXNwYXRjaGVyOwotfQogCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwot
ICAgIHJldHVybiBzZWxmOwotfQorI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CiAKLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtf
Y29tbWFuZERvbWFpbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19ldmVudERvbWFpbkV2ZW50RGlz
cGF0Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19CituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIAotLSAodm9pZClzZXRDb21tYW5kRG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3Rv
Y29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3ZvaWQgT2JqQ0luc3BlY3Rv
ckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFs
dWUobG9uZyByZXF1ZXN0SWQpCiB7Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2NvbW1hbmREb21haW5I
YW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX2NvbW1hbmREb21haW5IYW5kbGVyIHJl
bGVhc2VdOwotICAgIF9jb21tYW5kRG9tYWluSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Cisg
ICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OwogCi0gICAgYXV0byBhbHRlcm5hdGVEaXNw
YXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gc3RkOjpt
YWtlX3VuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxDb21tYW5kRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIsIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KEFT
Q0lJTGl0ZXJhbCgiQ29tbWFuZERvbWFpbiIpLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJu
YXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1v
dmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKFRlc3RQ
cm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVl
IHJldHVyblZhbHVlKSB7CisgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVj
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicmV0dXJuVmFsdWUiKSwgdG9Qcm90b2NvbFN0cmluZyhyZXR1
cm5WYWx1ZSkpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVx
dWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCkpOworICAgIH07CiAKLS0gKGlkPFRlc3RQcm90
b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiljb21tYW5kRG9tYWluSGFuZGxlcgotewot
ICAgIHJldHVybiBfY29tbWFuZERvbWFpbkhhbmRsZXI7CisgICAgW21fZGVsZWdhdGUgY29tbWFu
ZFdpdGhFbnVtUmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwogfQogCi0tIChUZXN0UHJvdG9jb2xFdmVudERv
bWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWV2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyCi17
Ci0gICAgaWYgKCFfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9ldmVudERv
bWFpbkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVu
dERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAg
cmV0dXJuIF9ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAogCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKIAotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLm1tCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQog
CiAjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCiAvKgpAQCAtNzY1
LDcgKzcyNSw3IEBAIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQogCiAj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAogCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNzk3LDM4ICs3NTcsNzAgQEAgX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCiAvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CiAKICNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgogI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgog
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JW
YWx1ZXMuaD4KK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKLW5hbWVzcGFjZSBJbnNwZWN0
b3IgeworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQ
cm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiBfY29tbWFuZERvbWFpbkhhbmRsZXI7
CisgICAgVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKl9ldmVu
dERvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KIAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29u
dHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7Cisg
ICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxl
cjsKKyAgICByZXR1cm4gc2VsZjsKK30KIAorLSAodm9pZClkZWFsbG9jCit7CisgICAgW19jb21t
YW5kRG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBbX2V2ZW50RG9tYWluRXZlbnREaXNwYXRj
aGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KIAotdm9pZCBPYmpDSW5zcGVj
dG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5W
YWx1ZShsb25nIHJlcXVlc3RJZCkKKy0gKHZvaWQpc2V0Q29tbWFuZERvbWFpbkhhbmRsZXI6KGlk
PFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCiB7Ci0gICAg
aWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OworICAgIGlmIChoYW5kbGVyID09IF9jb21tYW5k
RG9tYWluSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNr
ID0gXihUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVS
ZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSkgewotICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICByZXN1bHRP
YmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInJldHVyblZhbHVlIiksIHRvUHJvdG9jb2xT
dHJpbmcocmV0dXJuVmFsdWUpKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpKTsKLSAgICB9OworICAgIFtf
Y29tbWFuZERvbWFpbkhhbmRsZXIgcmVsZWFzZV07CisgICAgX2NvbW1hbmREb21haW5IYW5kbGVy
ID0gW2hhbmRsZXIgcmV0YWluXTsKIAotICAgIFttX2RlbGVnYXRlIGNvbW1hbmRXaXRoRW51bVJl
dHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrXTsKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBzdGQ6Om1h
a2VfdW5pcXVlPE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+KGhh
bmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFsdGVy
bmF0ZURpc3BhdGNoYWJsZUFnZW50PENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciwgQWx0
ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oQVNDSUlMaXRlcmFsKCJDb21t
YW5kRG9tYWluIiksICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7
CisgICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2Vu
dCkpOwogfQogCistIChpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4p
Y29tbWFuZERvbWFpbkhhbmRsZXIKK3sKKyAgICByZXR1cm4gX2NvbW1hbmREb21haW5IYW5kbGVy
OworfQogCistIChUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAq
KWV2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFfZXZlbnREb21haW5FdmVu
dERpc3BhdGNoZXIpCisgICAgICAgIF9ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlciA9IFtbVGVz
dFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRo
Q29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9ldmVudERvbWFpbkV2ZW50RGlz
cGF0Y2hlcjsKK30KIAorQGVuZAogCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKIAotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQogCiAjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sRXZlbnREaXNwYXRjaGVycy5tbQogLyoKQEAgLTg2OSwxMCArODYxLDYgQEAgdm9pZCBPYmpD
SW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kV2l0aEVudW1S
ZXR1cm5WYWx1ZShsb24KIAogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAotCi0KLQotCiBA
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNo
ZXIKIHsKICAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwpA
QCAtOTUxLDE5ICs5MzksNiBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9j
b2xUeXBlRG9tYWluRW51bSkgewogICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1ZSwK
IH07CiAKLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbENvbW1hbmREb21h
aW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlKSB7Ci0gICAgVGVzdFByb3Rv
Y29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWVTaGFy
ZWQsCi0gICAgVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZh
bHVlUmV0dXJuVmFsdWVDeWFuLAotICAgIFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5k
V2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlTWFnZW50YSwKLSAgICBUZXN0UHJvdG9jb2xD
b21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZVllbGxvdywK
LX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbEV2ZW50RG9tYWlu
RXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlcikgewotICAgIFRlc3RQcm90b2NvbEV2ZW50
RG9tYWluRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlclNoYXJlZCwKLSAgICBUZXN0UHJv
dG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXJCbGFjaywKLSAg
ICBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXJX
aGl0ZSwKLX07Ci0KIAogCiBAcHJvdG9jb2wgVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFp
bkhhbmRsZXIgPE5TT2JqZWN0PgpAQCAtMTA5MSw2MiArMTA2Niw2IEBAIGlubGluZSBUZXN0UHJv
dG9jb2xUeXBlRG9tYWluRW51bSBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1TaGFyZWQ7CiB9CiAKLQot
aW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbENvbW1hbmREb21haW5D
b21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlIHZhbHVlKQotewotICAgIHN3aXRj
aCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWVTaGFyZWQ6Ci0gICAgICAgIHJldHVybiBBU0NJSUxp
dGVyYWwoInNoYXJlZCIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1h
bmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWVDeWFuOgotICAgICAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCJjeWFuIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29t
bWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZU1hZ2VudGE6Ci0gICAgICAgIHJldHVy
biBBU0NJSUxpdGVyYWwoIm1hZ2VudGEiKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbENvbW1hbmRE
b21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlWWVsbG93OgotICAgICAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ5ZWxsb3ciKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4K
LWlubGluZSBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFs
dWVSZXR1cm5WYWx1ZSBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUgPT0gInNoYXJlZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xD
b21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZVNoYXJlZDsK
LSAgICBpZiAodmFsdWUgPT0gImN5YW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sQ29t
bWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWVDeWFuOwotICAg
IGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xDb21t
YW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZU1hZ2VudGE7Ci0g
ICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sQ29t
bWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWVZZWxsb3c7Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFRlc3RQcm90b2NvbENvbW1hbmRE
b21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlU2hhcmVkOwotfQotCi0K
LWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2
ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVl
KSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0
ZXJQYXJhbWV0ZXJTaGFyZWQ6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInNoYXJlZCIp
OwotICAgIGNhc2UgVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVy
UGFyYW1ldGVyQmxhY2s6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImJsYWNrIik7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJh
bWV0ZXJXaGl0ZToKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgid2hpdGUiKTsKLSAgICB9
Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0
aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJzaGFyZWQiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyU2hhcmVk
OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyQmxhY2s7Ci0gICAgaWYg
KHZhbHVlID09ICJ3aGl0ZSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xFdmVudERvbWFp
bkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXJXaGl0ZTsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVt
UGFyYW1ldGVyUGFyYW1ldGVyU2hhcmVkOwotfQotCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
IAogIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaApAQCAtMTE5Niwx
MiArMTExNSw2IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiArICh2b2lkKV9wYXJzZVR5
cGVEb21haW5FbnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKIAogQGVuZAotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKENvbW1h
bmREb21haW5Eb21haW4pCi0KLUBlbmQKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChFdmVudERvbWFpbkRvbWFpbikKLQotQGVuZAogCiBAaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUeXBlRG9tYWluRG9tYWluKQogCkBAIC0xMjEyLDEy
ICsxMTI1LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIH0KIAogQGVuZAotQGltcGxl
bWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoQ29tbWFuZERvbWFpbkRvbWFp
bikKLQotQGVuZAotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAo
RXZlbnREb21haW5Eb21haW4pCi0KLUBlbmQKIAogCiAjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQpAQCAtMTI2Niw4ICsxMTczLDQgQEAgdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKIAogCiAKLQotCi0KLQogIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
cy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5q
c29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1y
ZXN1bHQKaW5kZXggYzMxZDY4NGNlMzIwYmY3NTRlNmE2YWM3Mzc3ZTE3YWMxN2Q1Y2NmNC4uNTQ3
YmRmOTNmMDliNzRjZjg1Y2IxNDlkMDIzMTJhOGNiZjA3MWYyYSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9l
dmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC01NTQsMTMgKzU1
NCwxMSBAQCBuYW1lc3BhY2UgUHJvdG9jb2wgewogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIAot
Ci0KIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgogCiAjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCiAKLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLm1tCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLm1tCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCkBAIC01OTIsNTAgKzU5MCwxNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IC8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKIAogI2ltcG9ydCAiY29u
ZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCiAjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJs
ZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFz
ZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyOwotfQogCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlm
ICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0g
ICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2
b2lkKWRlYWxsb2MKLXsKLSAgICBbX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwot
ICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5F
dmVudERpc3BhdGNoZXIgKilkYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICghX2Rh
dGFiYXNlRXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfZGF0YWJhc2VFdmVudERpc3BhdGNoZXIg
PSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0
V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfZGF0YWJhc2VFdmVudERp
c3BhdGNoZXI7Ci19CisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JWYWx1ZXMuaD4KIAotQGVuZAorbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgogCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24ubW0KKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
Lm1tCiAKICMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKIC8qCkBA
IC02NzgsNyArNjQzLDcgQEAgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkp
CiAKICMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCiAKLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC03MTAsMTkgKzY3NSw1MCBA
QCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKIC8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKIAogI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCiAjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJz
Lmg+CiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvclZhbHVlcy5oPgordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAotbmFtZXNwYWNlIElu
c3BlY3RvciB7CitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgorewor
ICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAgVGVz
dFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgKl9kYXRhYmFzZUV2ZW50RGlz
cGF0Y2hlcjsKK30KIAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJU
KGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4g
c2VsZjsKK30KIAorLSAodm9pZClkZWFsbG9jCit7CisgICAgW19kYXRhYmFzZUV2ZW50RGlzcGF0
Y2hlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CiAKLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorLSAoVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIg
KilkYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcgoreworICAgIGlmICghX2RhdGFiYXNlRXZlbnREaXNw
YXRjaGVyKQorICAgICAgICBfZGF0YWJhc2VFdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2Nv
bERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6
X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfZGF0YWJhc2VFdmVudERpc3BhdGNoZXI7Cit9CiAK
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCiAKICMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCiAvKgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uLWVycm9yIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uLWVycm9yCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmVjNjM2YzU0YjdjNWMxMDcwOWUwYzNiNjU5NGE5MmU1MWRjMmM3NTAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtd2l0aC1pbnZhbGlkLXBsYXRmb3Jt
Lmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFVua25vd24gcGxhdGZvcm06IGludmFs
aWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWludmFsaWQtcGxhdGZvcm0u
anNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWludmFsaWQtcGxhdGZvcm0uanNv
bi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lYzYzNmM1NGI3YzVjMTA3MDllMGMzYjY1OTRhOTJlNTFkYzJj
NzUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgtaW52YWxpZC1w
bGF0Zm9ybS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBVbmtub3duIHBsYXRmb3Jt
OiBpbnZhbGlkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVy
ZS1ndWFyZHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVy
ZS1ndWFyZHMuanNvbi1yZXN1bHQKaW5kZXggNzk0NjY2ZDJjZDlkMGE3OGIzNzUyN2Q2YzY4NmM0
ZmJjZjkxMDE5My4uZjRmYjI1M2M5YzNkYTg3OTVhMTBlZjllZTk0ZjBjNTk0MzdkMjljZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24t
cmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5q
c29uLXJlc3VsdApAQCAtNjEzLDE1ICs2MTMsMTEgQEAgcHJpdmF0ZToKIH07CiAjZW5kaWYgLy8g
UExBVEZPUk0oV0VCX0NPTU1BTkRTKQogCi0KLQotCi0KIH0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgogCiAjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCiAKLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC02NTMsNzAgKzY0
OSwzNCBAQCBwcml2YXRlOgogLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKICNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsK
LSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlk
PFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsKLSAg
ICBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX25ldHdvcmszRXZl
bnREaXNwYXRjaGVyOwotfQogCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0g
W3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBB
U1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJl
dHVybiBzZWxmOwotfQorI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yVmFsdWVzLmg+CiAKLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfbmV0d29y
azFIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtfbmV0d29yazNFdmVudERpc3BhdGNoZXIgcmVsZWFz
ZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQorbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLS0g
KHZvaWQpc2V0TmV0d29yazFIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhh
bmRsZXI+KWhhbmRsZXIKKyNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCit2b2lkIE9iakNJbnNw
ZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0
SWQpCiB7Ci0gICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmsxSGFuZGxlcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgW19uZXR3b3JrMUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX25ldHdvcmsxSGFu
ZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIg
PSBzdGQ6Om1ha2VfdW5pcXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
PihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxB
bHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyLCBBbHRl
cm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPj4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrMSIp
LCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250
cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KKyAg
ICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CiAKLS0gKGlkPFRlc3RQcm90b2NvbE5ldHdv
cmsxRG9tYWluSGFuZGxlcj4pbmV0d29yazFIYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9uZXR3b3Jr
MUhhbmRsZXI7Ci19CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKSk7CisgICAgfTsKIAotLSAoVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERp
c3BhdGNoZXIgKiluZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICghX25ldHdvcmsz
RXZlbnREaXNwYXRjaGVyKQotICAgICAgICBfbmV0d29yazNFdmVudERpc3BhdGNoZXIgPSBbW1Rl
c3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENv
bnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfbmV0d29yazNFdmVudERpc3BhdGNo
ZXI7CisgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotQGVuZAorI2Vu
ZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKIAorfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CiAKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KIAogIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAogLyoKQEAgLTc2MCw3ICs3MjAsNyBAQCBfX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKIAogIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKIAotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5tbQorIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24ubW0KIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KQEAgLTc5MiwzOCArNzUyLDcwIEBAIF9fYXR0cmlidXRlX18oKHZpc2li
aWxpdHkgKCJkZWZhdWx0IikpKQogLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgogCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1
ZXMuaD4KKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVy
bmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CiAKLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5E
UykKLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZShsb25nIHJlcXVlc3RJZCkKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uCiB7Ci0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OworICAgIEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3RvY29s
TmV0d29yazFEb21haW5IYW5kbGVyPiBfbmV0d29yazFIYW5kbGVyOworICAgIFRlc3RQcm90b2Nv
bE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyICpfbmV0d29yazNFdmVudERpc3BhdGNoZXI7
Cit9CiAKLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
KTsKLSAgICB9OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNv
bnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2Vs
ZjsKK30KIAotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOmVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CistICh2b2lkKWRl
YWxsb2MKK3sKKyAgICBbX25ldHdvcmsxSGFuZGxlciByZWxlYXNlXTsKKyAgICBbX25ldHdvcmsz
RXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KIAotI2Vu
ZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKKy0gKHZvaWQpc2V0TmV0d29yazFIYW5kbGVy
OihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBp
ZiAoaGFuZGxlciA9PSBfbmV0d29yazFIYW5kbGVyKQorICAgICAgICByZXR1cm47CiAKKyAgICBb
X25ldHdvcmsxSGFuZGxlciByZWxlYXNlXTsKKyAgICBfbmV0d29yazFIYW5kbGVyID0gW2hhbmRs
ZXIgcmV0YWluXTsKIAorICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91
bmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+KGhhbmRsZXIpOwor
ICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50PE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZU5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXI+PihBU0NJSUxpdGVyYWwoIk5ldHdvcmsxIiksICpfY29udHJvbGxl
ciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2NvbnRyb2xsZXItPmFwcGVu
ZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQogCistIChpZDxUZXN0UHJv
dG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+KW5ldHdvcmsxSGFuZGxlcgoreworICAgIHJldHVy
biBfbmV0d29yazFIYW5kbGVyOworfQogCistIChUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2
ZW50RGlzcGF0Y2hlciAqKW5ldHdvcmszRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFfbmV0
d29yazNFdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9uZXR3b3JrM0V2ZW50RGlzcGF0Y2hlciA9
IFtbVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRX
aXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJuIF9uZXR3b3JrM0V2ZW50RGlz
cGF0Y2hlcjsKK30KIAotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCitAZW5kCiAKLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQogCiAjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sRXZlbnREaXNwYXRjaGVycy5tbQogLyoKQEAgLTg2NCwxMCArODU2LDYgQEAgdm9pZCBPYmpD
SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVx
dWVzdElkKQogCiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCi0KLQotCi0KIEBpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlcgogewogICAg
IEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7CkBAIC0xMDQ0LDEw
ICsxMDMyLDYgQEAgT2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKTsKIAogCiAKLQotCi0KLQogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCiAKICMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKQEAgLTEwOTIsMjEgKzEwNzYs
MTIgQEAgT2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KTsKIAogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAotQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsxRG9tYWluKQotCi1AZW5kCiBAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazJEb21haW4pCiAKICsgKHZvaWQpX3Bh
cnNlTmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKIAogQGVuZAotQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmszRG9tYWluKQogCi1AZW5kCi0KLUBpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsxRG9tYWluKQotCi1A
ZW5kCiBAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3Jr
MkRvbWFpbikKIAogKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdv
cmsyTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCkBAIC0x
MTE2LDkgKzEwOTEsNiBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogfQogCiBAZW5kCi1A
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrM0RvbWFp
bikKLQotQGVuZAogCiAKICMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCkBAIC0xMTY1LDggKzExMzcsNiBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAogCi0KLQogQGltcGxlbWVudGF0aW9uIFRlc3RQcm90
b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yCiAKIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxv
YWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKQEAgLTEy
MjYsNiArMTE5Niw0IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiBAZW5kCiAKIAotCi0K
ICMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3Nh
bWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2FtZS10eXBl
LWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKaW5kZXggOGFlZDJiNzU1NmQ1YTU0YzUy
ZjZiNWY2NzZiNjI5NWVhMjM3MTIyMC4uYjhmNjg3MmNmYzk0MmU1NzRjODM3ZmJjNzI3OGMwYTgz
N2I0YjYzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4u
anNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNv
bi1yZXN1bHQKQEAgLTQyMiwxNSArNDIyLDExIEBAIG5hbWVzcGFjZSBQcm90b2NvbCB7CiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIAogCi0KLQotCi0KIH0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgog
CiAjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCiAKLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC00NjIsNDEgKzQ1OCwx
NyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIC8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCiAjaW1w
b3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxl
cjsKLX0KIAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRy
b2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsK
LX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQorI2luY2x1
ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+
CiAKLUBlbmQKK25hbWVzcGFjZSBJbnNwZWN0b3IgewogCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKIAotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQogCiAjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCiAvKgpAQCAtNTM4LDcgKzUxMCw3IEBAIF9f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQogCiAjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAogCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLm1tCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgpAQCAtNTcwLDIxICs1NDIsNDEgQEAgX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCiAvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCiAK
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZh
bHVlcy5oPgorI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0
ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KIAotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Cit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCitAaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciogX2NvbnRyb2xsZXI7Cit9CiAKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6
KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAg
IEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAg
cmV0dXJuIHNlbGY7Cit9CiAKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9j
XTsKK30KIAorQGVuZAogCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKIAotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5tbQogCiAjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQogLyoKQEAgLTYyNiwxMCArNjE4LDYgQEAgbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiAKLQotCi0KLQogIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCiAKICMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2wuaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1z
ZXR0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJz
Lmpzb24tcmVzdWx0CmluZGV4IDRhYTVhMTFkNDM3MGI0ZGIwNzhkZjQzNzI1ZDRiNDZjM2Y2NDll
MDguLmViNjkyMDkzYzFlYjAyOTZkZjk0MjM0YjMwYmQyODU3ZDBmMjViZWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKQEAgLTU0NSwx
MyArNTQ1LDExIEBAIHN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
S2V5UGF0aDo6VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIAogCi0KLQogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCiAKICMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKIAotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMubW0KIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTU4Myw0MSArNTgxLDE3IEBAIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQogCiAjaW1w
b3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKICNpbXBvcnQgIlRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlz
cGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQogCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
KWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikK
LSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRy
b2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxs
b2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19CisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KIAotQGVuZAorbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgogCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLm1tCiAKICMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgKIC8qCkBAIC02NTksNyArNjMzLDcgQEAgX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCiAKICMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCiAKLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
bW0KKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBA
IC02OTEsMTkgKzY2NSw0MSBAQCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKIC8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKIAogI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCiAjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNo
YWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJzLmg+CiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKIAotbmFtZXNwYWNlIEluc3BlY3RvciB7CitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2Nv
bnRyb2xsZXI7Cit9CiAKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VS
VChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJu
IHNlbGY7Cit9CiAKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30K
IAotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCitAZW5kCiAKLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQogCiAjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQogLyoKQEAgLTc0NSw4ICs3NDEsNiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIAotCi0KICMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQogCiAjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUt
dHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uLXJlc3VsdAppbmRleCAxNjdkNTAxYjM4Yzk1NDQyYjk4NzlmMDQ4NGM5Nzgw
NWM5NDU2OGFhLi5kYTllNmJkOGViOTg1ODU1NDQyNjhiY2I3NTIyZjg3ZjkyM2M3NjliIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNv
bi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10
eXBlLmpzb24tcmVzdWx0CkBAIC00MTcsMTMgKzQxNywxMSBAQCBuYW1lc3BhY2UgUHJvdG9jb2wg
ewogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIAotCi0KIH0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgogCiAjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCiAKLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC00NTUsNDEgKzQ1
MywxNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIC8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCiAj
aW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJv
bGxlcjsKLX0KIAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNv
bnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2Vs
ZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQorI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVz
Lmg+CiAKLUBlbmQKK25hbWVzcGFjZSBJbnNwZWN0b3IgewogCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKIAotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQogCiAjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCiAvKgpAQCAtNTMxLDcgKzUwNSw3IEBA
IF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQogCiAjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAogCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5tbQogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNTYzLDE5ICs1MzcsNDEgQEAgX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCiAvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CiAKICNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgogI2ltcG9y
dCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgogCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KK3Vz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKLW5hbWVzcGFjZSBJbnNwZWN0b3IgeworQGltcGxl
bWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQogCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xs
ZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBj
b250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQogCistICh2b2lkKWRlYWxsb2MKK3sKKyAg
ICBbc3VwZXIgZGVhbGxvY107Cit9CiAKLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorQGVuZAog
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KIAogIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KIC8qCkBAIC02MTcsOCArNjEzLDYgQEAg
bmFtZXNwYWNlIEluc3BlY3RvciB7CiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiAKLQot
CiAjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KIAogIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5
LXR5cGUuanNvbi1yZXN1bHQKaW5kZXggYzQ2N2ZhY2Q1ZWM4MWU1ZWZjYzRhYWFlMWVkMmVmNTdm
ZmQ0ZTJjNS4uMjhmODlhOTU4NjdiM2I1NTA3NTE3YWYzZDMzYTdjYmM3ZjUxZmQ1ZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdApAQCAtNDk1LDE1
ICs0OTUsMTEgQEAgc3RkOjpvcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6
UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW4KIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCiAKLQotCi0KLQogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCiAKICMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKIAotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMubW0KIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTUzNSw0MSArNTMxLDE3IEBAIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQogCiAj
aW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKICNpbXBvcnQgIlRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRl
RGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQogCi0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2Vs
ZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2Nv
bnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRl
YWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19CisjaW5jbHVkZSAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KIAotQGVuZAorbmFtZXNw
YWNlIEluc3BlY3RvciB7CiAKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgogCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLm1tCiAKICMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLmgKIC8qCkBAIC02MTEsNyArNTgzLDcgQEAgX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCiAKICMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oCiAKLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CkBAIC02NDMsMjEgKzYxNSw0MSBAQCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKIC8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKIAogI2ltcG9y
dCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKIAotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFi
bGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVycy5oPgogCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CiAKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsK
K30KIAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsK
KyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xs
ZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30K
IAorLSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQogCitAZW5kCiAK
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgogCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5tbQorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLm1tCiAKICMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1t
CiAvKgpAQCAtNjk5LDEwICs2OTEsNiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIHVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CiAKIAotCi0KLQotCiAjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEV2ZW50RGlzcGF0Y2hlcnMubW0KIAogIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0CmluZGV4IDJlNjQw
MDVkZDg4MGE2MGRiOTMxODM4OTJkZjE1OTIwODRkZTQ0MmQuLmIwYjY4MDMyOWRlZTMzMzkxYzUx
NDBlZTEzYWUwNmQ2OTk3ZThhNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10
eXBlLmpzb24tcmVzdWx0CkBAIC01MTUsMTMgKzUxNSwxMSBAQCBzdGQ6Om9wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVl
RnJvbQogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIAotCi0KIH0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgogCiAjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCiAK
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC01NTMsNDEg
KzU1MSwxNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIC8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
CiAjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29u
dHJvbGxlcjsKLX0KIAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJU
KGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFs
dWVzLmg+CiAKLUBlbmQKK25hbWVzcGFjZSBJbnNwZWN0b3IgewogCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKIAotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQogCiAjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCiAvKgpAQCAtNjI5LDcgKzYwMyw3
IEBAIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQogCiAjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAogCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNjYxLDE5ICs2MzUsNDEgQEAgX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCiAvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CiAKICNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgogI2lt
cG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgogCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4K
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKLW5hbWVzcGFjZSBJbnNwZWN0b3IgeworQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQogCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIg
PSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQogCistICh2b2lkKWRlYWxsb2MKK3sK
KyAgICBbc3VwZXIgZGVhbGxvY107Cit9CiAKLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorQGVu
ZAogCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KIAogIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KIC8qCkBAIC03MTUsOCArNzExLDYg
QEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiAK
LQotCiAjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KIAogIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xh
cmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1v
YmplY3QtdHlwZS5qc29uLXJlc3VsdAppbmRleCBhOWMwNjZmNDAzODdlMzI0NWJhN2FlN2RhZDRj
NzMzZGZjMzhiMDNhLi45YjAzMzEyZmUyYjA1M2ZhOGViYzRjYjE1ZjBjMWRmZTI5MDI0MzVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKQEAg
LTg4MiwxNSArODgyLDExIEBAIG5hbWVzcGFjZSBQcm90b2NvbCB7CiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAogCi0KLQotCi0KIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgogCiAjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCiAKLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLm1tCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC05MjIsNDEgKzkxOCwxNyBAQCBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIC8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
IAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCiAjaW1wb3J0ICJUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVy
bmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0g
ICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KIAotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAo
IXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAg
IF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9p
ZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQorI2luY2x1ZGUgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CiAKLUBlbmQKK25h
bWVzcGFjZSBJbnNwZWN0b3IgewogCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKIAotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQogCiAjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oCiAvKgpAQCAtOTk4LDcgKzk3MCw3IEBAIF9fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQogCiAjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaAogCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLm1tCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgpAQCAtMTAzMCwyMSArMTAwMiw0MSBAQCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgi
ZGVmYXVsdCIpKSkKIC8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKIAog
I2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKIAotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Cisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNw
YXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgogCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKK3VzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJv
bGxlcjsKK30KIAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNv
bnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2Vs
ZjsKK30KIAorLSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQogCitA
ZW5kCiAKLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgogCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLm1tCiAKICMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNo
ZXJzLm1tCiAvKgpAQCAtMTA4NiwxMCArMTA3OCw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAogCi0KLQotCi0KICMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQogCiAjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNv
bi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0
CmluZGV4IGYxZmQyYWM4MWQ1ZWNmNGVkNjdkNjFkYzlkMDEyNGY4ZGI0MmI1OTYuLjcwMzY4ZmRk
YTVhM2FlZjIwMWM1NzY3NWE5NWVmMjYzYjhjMDZjMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUt
cmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1yZXF1
aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdApAQCAtODQyLDEzICs4NDIsMTEgQEAgdm9p
ZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVj
dDI+Ojphc3NlcnRWYWx1ZUhhc0UKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAKLQotCiB9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKIAogIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAogCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5tbQorIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgpAQCAtODgwLDQxICs4NzgsMTcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CiAKICNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgogI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5o
PgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19CiAKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewot
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4g
bmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xs
ZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBl
ciBkZWFsbG9jXTsKLX0KKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvclZhbHVlcy5oPgogCi1AZW5kCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCiAKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5tbQorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KIAogIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAogLyoK
QEAgLTk1Niw3ICs5MzAsNyBAQCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKIAogIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKIAotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTk4OCwxOSArOTYyLDQx
IEBAIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQogLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQogCiAjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKICNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yVmFsdWVzLmg+Cit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7
CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KIAor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBp
ZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOwor
ICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KIAorLSAo
dm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQogCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKK0BlbmQKIAotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMubW0KKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
CiAKICMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCiAvKgpA
QCAtMTA0Miw4ICsxMDM4LDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiB1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwogCiAKLQotCiAjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlz
cGF0Y2hlcnMubW0KIAogIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9m
YWlsLW9uLWNvbW1hbmQtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQt
d2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTE4MGNhZTliZmY4ZGEyNGYw
NmNmMjEwNWVkNTk4NDU0Y2Y1ZWNmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC13
aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbgpAQCAtMCwwICsxLDE2IEBACit7CisgICAgImRvbWFp
biI6ICJPdmVybGF5IiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJuYW1lIjogInByb2Nlc3NQb2ludHMiLAorICAgICAgICAgICAgInBsYXRmb3JtIjogImludmFs
aWQiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwb2ludDEiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwb2ludDIiLCAidHlwZSI6ICJudW1iZXIiIH0KKyAgICAgICAgICAgIF0sCisgICAgICAg
ICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3VsdCIsICJ0
eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZmFpbC1vbi10eXBlLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBl
LXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5ZmQyZTk5NTYxZGUwY2Uz
Yzc2NmVlNjg4MjFjYTIzYzY0ZDVjOTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0
aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24KQEAgLTAsMCArMSwxMSBAQAoreworICAgICJkb21haW4i
OiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQi
OiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAg
ICAgICAgICJwbGF0Zm9ybSI6ICJpbnZhbGlkIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2lvcy9k
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2lvcy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjgxN2YxMzVlZTVhNzIwOTdhZTNlMTMxYmRkNDBlNjAxNjk4YWIx
MGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvaW9zL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KQEAgLTAs
MCArMSwyOCBAQAoreworICAgICJkb21haW4iOiAiTmV0d29yayIsCisgICAgInR5cGVzIjogWwor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTmV0d29ya0Vycm9yIiwKKyAgICAgICAgICAg
ICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAorICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNz
YWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAi
ZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQor
ICAgIF0sCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6
ICJsb2FkUmVzb3VyY2UiLAorICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKKyAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9m
IGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNr
cy4iCisgICAgICAgIH0KKyAgICBdLAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJuYW1lIjogInJlc291cmNlTG9hZGVkIiwKKyAgICAgICAgICAgICJwbGF0Zm9ybSI6
ICJtYWNvcyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSByZXNvdXJjZSB3YXMgbG9h
ZGVkLiIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9pb3MvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvaW9zL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmYWRiYTdiNzQ1NDQ4M2Q3NDA5ZWE2NjdkZTc2
ZGFiOWU2ZTRkZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvaW9zL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsODM1IEBACisjIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lk
IHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRj
aGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAg
QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERp
c3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oIgorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBG
cm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmlu
aXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
IgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMt
cGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5
cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworCisKKworCit9IC8vIG5hbWVz
cGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7
CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsK
K30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsK
KyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xs
ZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
VmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCisK
KworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPYmpDRW51bVR5cGUgZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRo
LW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5o
PgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MTdmMTM1ZWU1YTcyMDk3
YWUzZTEzMWJkZDQwZTYwMTY5OGFiMTBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL21hYy9kZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCkBAIC0wLDAgKzEsMjggQEAKK3sKKyAgICAiZG9tYWluIjogIk5ldHdv
cmsiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk5ldHdv
cmtFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInBs
YXRmb3JtIjogIm1hY29zIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlv
biI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUi
LCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAg
ICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAg
eworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwKKyAgICAgICAgICAgICJwbGF0
Zm9ybSI6ICJtYWNvcyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNv
dXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRo
b3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9CisgICAgXSwKKyAgICAiZXZlbnRz
IjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIsCisg
ICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIkEgcmVzb3VyY2Ugd2FzIGxvYWRlZC4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvbWFjL2V4
cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL21hYy9leHBlY3RlZC9kZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZjM0OGYy
YThhNWY5OWQ1NGEwYzUyNDQ1NDU2YjQ5ZjY3NjdiNDVjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL21hYy9leHBlY3RlZC9k
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDExNzIg
QEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIE5ldHdv
cmsuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyTmV0d29ya0Rpc3BhdGNoZXIgPSBJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQs
ICJOZXR3b3JrIik7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIk5ldHdvcmsucmVz
b3VyY2VMb2FkZWQiLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0
d29yay5sb2FkUmVzb3VyY2UiLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURv
bWFpbigiTmV0d29yayIpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2Ns
YXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJh
Y2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7
IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5k
RGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZU5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKCkg
eyB9CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShsb25nIGNhbGxJZCkgPSAwOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjsKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworY2xhc3Mg
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIH5OZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TmV0d29ya0JhY2tlbmREaXNwYXRj
aGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7Citwcml2
YXRlOgorICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihB
bHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToK
KyAgICBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZgorcHJpdmF0ZToKKyAgICBOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7CisgICAgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51
bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
cj4gTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJh
Y2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoYmFj
a2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK05ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0
Y2hlciwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBw
bGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdl
bnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVy
Rm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiTmV0d29yayIpLCB0aGlzKTsKK30KKwordm9pZCBOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoQVNDSUlM
aXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7CisKKyAgICBpZiAobWV0aG9kID09ICJsb2Fk
UmVzb3VyY2UiKQorICAgICAgICBsb2FkUmVzb3VyY2UocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5n
KCdcJycsICJOZXR3b3JrIiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7Cit9CisK
K3ZvaWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewor
ICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShyZXF1ZXN0SWQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsK
KyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZShlcnJvcik7CisKKyAgICBpZiAoIWVycm9y
Lmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVx
dWVzdElkLCBXVEZNb3ZlKHJlc3VsdCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMj
IyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCitjbGFzcyBOZXR3b3JrRnJvbnRlbmREaXNw
YXRjaGVyIHsKK3B1YmxpYzoKKyAgICBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5k
Um91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVy
KSB7IH0KKyAgICB2b2lkIHJlc291cmNlTG9hZGVkKCk7Citwcml2YXRlOgorICAgIEZyb250ZW5k
Um91dGVyJiBtX2Zyb250ZW5kUm91dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK3ZvaWQgTmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVzb3Vy
Y2VMb2FkZWQoKQoreworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiTmV0d29yay5yZXNvdXJjZUxvYWRlZCIp
KTsKKworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisvLyBGb3J3YXJk
IGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBOZXR3b3JrIHsKK2NsYXNzIE5ldHdvcmtFcnJvcjsK
K30gLy8gTmV0d29yaworLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCitu
YW1lc3BhY2UgTmV0d29yayB7CitjbGFzcyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9G
aWVsZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAorICAgICAgICBDb2Rl
U2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVT
ZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVy
IHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3Vs
dDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBj
YXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBC
dWlsZGVyKFJlZjwvKk5ldHdvcmtFcnJvciovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAg
ICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgTmV0
d29ya0Vycm9yOworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2Fn
ZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNz
YWdlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJtZXNzYWdlIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2Rl
U2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImNvZGUiKSwgdmFs
dWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOworICAgICAgICB9
CisKKyAgICAgICAgUmVmPE5ldHdvcmtFcnJvcj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoTmV0d29ya0Vycm9y
KSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgp
OworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE5ldHdv
cmtFcnJvcj4qPigmcmVzdWx0KSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPE5ldHdvcmtFcnJvcj4gcmVzdWx0
ID0gTmV0d29ya0Vycm9yOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisg
ICAgICogICAgIC5zZXRDb2RlKC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8K
KyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsK
KyAgICB9Cit9OworCit9IC8vIE5ldHdvcmsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29s
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZv
cm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8g
bmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyOworCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlciB7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
cihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVn
YXRlID0gaGFuZGxlcjsgfQorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1
ZXN0SWQpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29s
TmV0d29ya0RvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE9iakNJbnNw
ZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJ
ZCkKK3sKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNz
Q2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9OworCisgICAgW21f
ZGVsZWdhdGUgbG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0K
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5T
T2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29ya0hh
bmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4gbmV0d29ya0hhbmRs
ZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbE5ldHdvcmtE
b21haW5FdmVudERpc3BhdGNoZXIgKm5ldHdvcmtFdmVudERpc3BhdGNoZXI7CitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhh
bmRsZXI+IF9uZXR3b3JrSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZl
bnREaXNwYXRjaGVyICpfbmV0d29ya0V2ZW50RGlzcGF0Y2hlcjsKK30KKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKilj
b250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9s
bGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9j
Cit7CisgICAgW19uZXR3b3JrSGFuZGxlciByZWxlYXNlXTsKKyAgICBbX25ldHdvcmtFdmVudERp
c3BhdGNoZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNl
dE5ldHdvcmtIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4paGFu
ZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrSGFuZGxlcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgW19uZXR3b3JrSGFuZGxlciByZWxlYXNlXTsKKyAgICBfbmV0d29ya0hhbmRs
ZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0g
c3RkOjptYWtlX3VuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiho
YW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudDxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0
ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4+KEFTQ0lJTGl0ZXJhbCgiTmV0d29yayIpLCAqX2Nv
bnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250cm9sbGVy
LT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8
VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+KW5ldHdvcmtIYW5kbGVyCit7CisgICAg
cmV0dXJuIF9uZXR3b3JrSGFuZGxlcjsKK30KKworLSAoVGVzdFByb3RvY29sTmV0d29ya0RvbWFp
bkV2ZW50RGlzcGF0Y2hlciAqKW5ldHdvcmtFdmVudERpc3BhdGNoZXIKK3sKKyAgICBpZiAoIV9u
ZXR3b3JrRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBfbmV0d29ya0V2ZW50RGlzcGF0Y2hlciA9
IFtbVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdp
dGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKKyAgICByZXR1cm4gX25ldHdvcmtFdmVudERpc3Bh
dGNoZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMu
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3Bh
dGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVy
OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUlu
c3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0
XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRy
b2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClyZXNvdXJjZUxvYWRlZAoreworICAgIGNvbnN0IEZyb250ZW5kUm91dGVy
JiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0
ZXJhbCgiTmV0d29yay5yZXNvdXJjZUxvYWRlZCIpKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KGpz
b25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBUZXN0UHJv
dG9jb2xOZXR3b3JrRXJyb3I7CisKKworCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgOiBSV0lQcm90
b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlv
bmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
SlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29k
ZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAq
bWVzc2FnZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGlu
dCBjb2RlOworQGVuZAorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRs
ZXIgPE5TT2JqZWN0PgorQHJlcXVpcmVkCistICh2b2lkKWxvYWRSZXNvdXJjZVdpdGhFcnJvckNh
bGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6KHZvaWQoXikoKSlzdWNjZXNzQ2FsbGJhY2s7CitAZW5kCisKK19fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3Jr
RG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKKy0gKHZvaWQpcmVzb3VyY2VMb2FkZWQ7
CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3
b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
KWNvbnRyb2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xB
cnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoTmV0d29ya0RvbWFpbikKKworKyAodm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90
b2NvbE5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3
b3JrRG9tYWluKQorCisrICh2b2lkKV9wYXJzZU5ldHdvcmtFcnJvcjooVGVzdFByb3RvY29sTmV0
d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7
CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgYWxsb2NdIGluaXRX
aXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbE5ldHdvcmtFcnJvcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2Fk
Oihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0s
IEAibWVzc2FnZSIpOworICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2Rl
Il0sIEAiY29kZSIpOworICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJW
YWx1ZV07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpT
T05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3QKK3sKKyAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltqc29uT2JqZWN0IHRvSW5z
cGVjdG9yT2JqZWN0XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICop
bWVzc2FnZSBjb2RlOihpbnQpY29kZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0p
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKKworICAgIHNlbGYubWVzc2FnZSA9IG1l
c3NhZ2U7CisgICAgc2VsZi5jb2RlID0gY29kZTsKKworICAgIHJldHVybiBzZWxmOworfQorCist
ICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIFtzdXBlciBzZXRT
dHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKE5TU3RyaW5nICopbWVz
c2FnZQoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOworfQor
CistICh2b2lkKXNldENvZGU6KGludCljb2RlCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6Y29k
ZSBmb3JLZXk6QCJjb2RlIl07Cit9CisKKy0gKGludCljb2RlCit7CisgICAgcmV0dXJuIFtzdXBl
ciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlcy5tbQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297639</attachid>
            <date>2016-12-21 17:22:44 -0800</date>
            <delta_ts>2016-12-22 11:35:13 -0800</delta_ts>
            <desc>[COMBINED PATCH] For EWS</desc>
            <filename>bug-166003-20161221172140.patch</filename>
            <type>text/plain</type>
            <size>1864495</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwMDkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
MzJiZWIwYWJkNDE5NTc3OWQ1ZmFlNWUyOTY2ZTc3Yzc0MDQ3M2I4Li42MDcwYWZkODRlYjlhNTdi
NzA5MTIzMmQ3NjA4OGI2MjRkNjU3M2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MTEgQEAKKzIwMTYtMTItMjEgIEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgV2ViIEluc3BlY3RvcjogdGVhY2ggdGhlIHByb3RvY29sIGdlbmVyYXRvciBhYm91
dCBwbGF0Zm9ybS1zcGVjaWZpYyB0eXBlcywgZXZlbnRzLCBhbmQgY29tbWFuZHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjAwMworICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjg3MTg5OTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIHBhcnNlciwgbW9kZWwsIGFu
ZCBnZW5lcmF0b3Itc2lkZSBjaGFuZ2VzIHRvIGFjY291bnQgZm9yCisgICAgICAgIHBsYXRmb3Jt
LXNwZWNpZmljIHR5cGVzLCBldmVudHMsIGFuZCBjb21tYW5kcy4gVGhlICdwbGF0Zm9ybScgcHJv
cGVydHkgaXMgcGFyc2VkCisgICAgICAgIGZvciB0b3AtbGV2ZWwgZGVmaW5pdGlvbnMgYW5kIGFz
c3VtZWQgdG8gYmUgdGhlICdnZW5lcmljJyBwbGF0Zm9ybSBpZiBub25lIGlzIHNwZWNpZmllZC4K
KworICAgICAgICBTaW5jZSB0aGUgZ2VuZXJhdG9yJ3MgcGxhdGZvcm0gc2V0dGluZyBhY3RzIHRv
IGZpbHRlciBkZWZpbml0aW9ucyB3aXRoIGFuIGluY29tcGF0aWJsZSBwbGF0Zm9ybSwKKyAgICAg
ICAgYWxsIGdlbmVyYXRvcnMgbXVzdCBiZSBtb2RpZmllZCB0byBjb25zdWx0IGEgbGlzdCBvZiBm
aWx0ZXJlZCB0eXBlcy9jb21tYW5kcy9ldmVudHMgZm9yCisgICAgICAgIGEgZG9tYWluIGluc3Rl
YWQgb2YgZGlyZWN0bHkgYWNjZXNzaW5nIERvbWFpbi57dHlwZV9kZWNsYXJhdGlvbnMsIGNvbW1h
bmRzLCBldmVudHN9LiBUbyBwcmV2ZW50CisgICAgICAgIGFjY2lkZW50YWwgbWlzdXNlLCBoaWRl
IHRob3NlIGZpZWxkcyBiZWhpbmQgYWNjZXNzb3JzIChlLmcuLCBgYWxsX3R5cGVfZGVjbGFyYXRp
b25zKClgKSBzbyB0aGF0IHRoZXkKKyAgICAgICAgYXJlIHN0aWxsIGFjY2Vzc2libGUgaWYgdHJ1
bHkgbmVjZXNzYXJ5LCBidXQgbm90IHVzZWQgYnkgZGVmYXVsdCBhbmQgY2F1c2VkIGFuIGVycm9y
IGlmIG5vdCBtaWdyYXRlZC4KKworICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OgorICAg
ICAgICAoQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVy
YXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5kb21haW5z
X3RvX2dlbmVyYXRlKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJh
dG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAg
KENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVy
X2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6
CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmRv
bWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9y
X2RvbWFpbik6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9zbWFsbF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9m
b3JfZG9tYWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuX2dlbmVyYXRlX2xhcmdlX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9u
X2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwRnJvbnRl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAg
ICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRj
aGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
LnB5OgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAgICAgIChDcHBGcm9udGVuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bnNfZm9yX2RvbWFpbik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwUHJvdG9jb2xU
eXBlc0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMpOgorICAg
ICAgICAoX2dlbmVyYXRlX3R5cGVkZWZzX2Zvcl9kb21haW4pOgorICAgICAgICAoX2dlbmVyYXRl
X2J1aWxkZXJzX2Zvcl9kb21haW4pOgorICAgICAgICAoX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFy
YXRpb25zX2Zvcl9iaW5kaW5nX3RyYWl0cyk6CisgICAgICAgIChfZ2VuZXJhdGVfZGVjbGFyYXRp
b25zX2Zvcl9lbnVtX2NvbnZlcnNpb25fbWV0aG9kcyk6CisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24u
cHk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dl
bmVyYXRlX2VudW1fY29udmVyc2lvbl9tZXRob2RzX2Zvcl9kb21haW4pOgorICAgICAgICAoQ3Bw
UHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9vcGVuX2ZpZWxk
X25hbWVzKToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
ci5fZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbik6CisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5OgorICAgICAgICAo
SlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbik6CisgICAg
ICAgIChKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAg
ICAgICAgKEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRlX2RvbWFpbik6CisgICAg
ICAgIChKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlLnNob3Vs
ZF9nZW5lcmF0ZV9kb21haW4pOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OgorICAg
ICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2Vu
ZXJhdGUpOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9n
ZW5lcmF0ZV9vYmpjX2ZvcndhcmRfZGVjbGFyYXRpb25zKToKKyAgICAgICAgKE9iakNCYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfb2JqY19oYW5kbGVyX2RlY2xhcmF0
aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAg
ICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IpOgorICAgICAg
ICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZG9tYWluc190
b19nZW5lcmF0ZSk6CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKToK
KyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IpOiBEZWxl
dGVkLgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5f
X2luaXRfXyk6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0
aW9uR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQ29u
ZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRv
ci5nZW5lcmF0ZV9vdXRwdXQpOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25J
bXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9m
b3JfZG9tYWluKTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50
YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1h
bmQpOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdl
bmVyYXRvci5fZ2VuZXJhdGVfc3VjY2Vzc19ibG9ja19mb3JfY29tbWFuZCk6IERlbGV0ZWQuCisg
ICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0
ZV9zdWNjZXNzX2Jsb2NrX2Zvcl9jb21tYW5kLmFuZCk6IERlbGV0ZWQuCisgICAgICAgIChPYmpD
Q29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9jb252ZXJzaW9u
c19mb3JfY29tbWFuZCk6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxl
bWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9jb252ZXJzaW9uc19mb3JfY29tbWFuZC5pbl9w
YXJhbV9leHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1w
bGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2ludm9jYXRpb25fZm9yX2NvbW1hbmQpOiBE
ZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19jb25maWd1cmF0aW9uX2hlYWRlci5weToKKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSGVh
ZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChPYmpDQ29uZmlndXJhdGlv
bkhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfcHJvcGVydGllc19mb3JfZG9tYWluKToKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlv
bl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50
YXRpb25HZW5lcmF0b3IpOgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlv
bkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25J
bXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRh
dGlvbl9mb3JfZG9tYWlucyk6CisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0
aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9pdmFycyk6CisgICAgICAgIChPYmpDQ29uZmlndXJhdGlv
bkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9kZWFsbG9jKToKKyAgICAgICAgKE9i
akNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5p
dF9fKTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQmFj
a2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOiBE
ZWxldGVkLgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IuX2dlbmVyYXRlX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbnMp
OiBEZWxldGVkLgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuX2dlbmVyYXRlX2l2YXJzKTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNCYWNrZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9kZWFsbG9jKTogRGVs
ZXRlZC4KKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLl9nZW5lcmF0ZV9oYW5kbGVyX3NldHRlcl9mb3JfZG9tYWluKTogRGVsZXRlZC4KKyAgICAg
ICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0
ZV9ldmVudF9kaXNwYXRjaGVyX2dldHRlcl9mb3JfZG9tYWluKTogRGVsZXRlZC4KKyAgICAgICAg
KE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl92YXJpYWJsZV9u
YW1lX3ByZWZpeF9mb3JfZG9tYWluKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbnMpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqY19oZWFkZXIucHk6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLmdlbmVy
YXRlX291dHB1dCk6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9mb3J3
YXJkX2RlY2xhcmF0aW9ucyk6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0
ZV9lbnVtcyk6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV90eXBlcyk6
CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9jb21tYW5kX3Byb3RvY29s
cyk6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudF9pbnRlcmZh
Y2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
aW50ZXJuYWxfaGVhZGVyLnB5OgorICAgICAgICAoT2JqQ0ludGVybmFsSGVhZGVyR2VuZXJhdG9y
LmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChPYmpDSW50ZXJuYWxIZWFkZXJHZW5lcmF0b3Iu
X2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfcHJpdmF0ZV9pbnRlcmZhY2VzKToKKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9j
b252ZXJzaW9uc19oZWFkZXIucHk6CisgICAgICAgIChPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lv
bnNIZWFkZXJHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAgICAgIChPYmpDUHJv
dG9jb2xUeXBlQ29udmVyc2lvbnNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2VudW1fY29udmVy
c2lvbl9mdW5jdGlvbnMpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9uLnB5Ogor
ICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAgICAgIChPYmpDUHJvdG9jb2xUeXBlQ29udmVy
c2lvbnNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfdHlwZV9mYWN0b3J5X2NhdGVn
b3J5X2ludGVyZmFjZSk6CisgICAgICAgIChPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfdHlwZV9mYWN0b3J5X2NhdGVnb3J5X2ltcGxl
bWVudGF0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChPYmpDUHJv
dG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgor
ICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0
ZV90eXBlX2ltcGxlbWVudGF0aW9ucyk6CisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRvci5weToKKyAgICAgICAgKEdlbmVyYXRvci5jYW5fZ2VuZXJhdGVfcGxh
dGZvcm0pOgorICAgICAgICAoR2VuZXJhdG9yKToKKyAgICAgICAgKEdlbmVyYXRvci50eXBlX2Rl
Y2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKEdlbmVyYXRvci5jb21tYW5kc19mb3Jf
ZG9tYWluKToKKyAgICAgICAgKEdlbmVyYXRvci5ldmVudHNfZm9yX2RvbWFpbik6CisgICAgICAg
IFRoZXNlIGFyZSB0aGUgY29yZSBtZXRob2RzIGZvciBjb21wdXRpbmcgd2hldGhlciBhIGRlZmlu
aXRpb24gY2FuIGJlIHVzZWQgZ2l2ZW4gYSB0YXJnZXQgcGxhdGZvcm0uCisKKyAgICAgICAgKEdl
bmVyYXRvci5jYWxjdWxhdGVfdHlwZXNfcmVxdWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMpOgorICAg
ICAgICAoR2VuZXJhdG9yLl90cmF2ZXJzZV9hbmRfYXNzaWduX2VudW1fdmFsdWVzKToKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weToKKyAgICAgICAgKFByb3Rv
Y29sLnBhcnNlX3R5cGVfZGVjbGFyYXRpb24pOgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfY29t
bWFuZCk6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV9ldmVudCk6CisgICAgICAgIChQcm90b2Nv
bC5yZXNvbHZlX3R5cGVzKToKKworICAgICAgICAoRG9tYWluLl9faW5pdF9fKToKKyAgICAgICAg
KERvbWFpbik6CisgICAgICAgIChEb21haW4uYWxsX3R5cGVfZGVjbGFyYXRpb25zKToKKyAgICAg
ICAgKERvbWFpbi5hbGxfY29tbWFuZHMpOgorICAgICAgICAoRG9tYWluLmFsbF9ldmVudHMpOgor
ICAgICAgICBIaWRlIGZpZWxkcyBiZWhpbmQgdGhlc2UgYWNjZXNzb3JzIHNvIGl0J3MgcmVhbGx5
IG9idmlvdXMgd2hlbiB3ZSBhcmUgaWdub3JpbmcgcGxhdGZvcm0gZmlsdGVyaW5nLgorCisgICAg
ICAgIChEb21haW4ucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoVHlwZURlY2xh
cmF0aW9uLl9faW5pdF9fKToKKyAgICAgICAgKENvbW1hbmQuX19pbml0X18pOgorICAgICAgICAo
RXZlbnQuX19pbml0X18pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2Jq
Y19nZW5lcmF0b3IucHk6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV90
eXBlc19mb3JfZG9tYWluKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3IpOgorICAgICAgICAoT2Jq
Q0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfY29tbWFuZHNfZm9yX2RvbWFpbik6CisgICAgICAg
IChPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9ldmVudHNfZm9yX2RvbWFpbik6CisgICAg
ICAgIChPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fdHlwZXNfZmlsdGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl90
eXBlc19maWx0ZXIuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl90eXBlcyk6IERlbGV0ZWQuCisgICAg
ICAgIChPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVy
X2ZpbHRlcik6IERlbGV0ZWQuCisgICAgICAgIChPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0
ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRlci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2Nv
bW1hbmRfaGFuZGxlcik6IERlbGV0ZWQuCisgICAgICAgIChPYmpDR2VuZXJhdG9yLnNob3VsZF9n
ZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJf
ZmlsdGVyLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcik6IERlbGV0ZWQu
CisgICAgICAgIENsZWFuIHVwIHNvbWUgbWVzc3kgY29kZSB0aGF0IGVzc2VudGlhbGx5IGRpZCB0
aGUgc2FtZSBkZWZpbml0aW9uIGZpbHRlcmluZyBhcyB3ZSBtdXN0IGRvIGZvciBwbGF0Zm9ybXMu
CisgICAgICAgIFRoaXMgd2lsbCBiZSBlbmhhbmNlZCBpbiBhIGZ1dHVyZSBwYXRjaCBzbyB0aGF0
IHBsYXRmb3JtIGZpbHRlcmluZyB3aWxsIHRha2UgcHJpb3JpdHkgb3ZlciB0aGUgdGFyZ2V0IGZy
YW1ld29yay4KKworICAgICAgICBUaGUgcmVzdWx0cyBhYm92ZSBuZWVkIHJlYmFzZWxpbmluZyBi
ZWNhdXNlIHRoZSBjbGFzcyBuYW1lcyBmb3IgdHdvIGdlbmVyYXRvcnMgd2VyZSBzd2FwcGVkIGJ5
IGFjY2lkZW50LgorICAgICAgICBGaXhpbmcgdGhlIG5hbWVzIGNhdXNlcyB0aGUgb3JkZXIgb2Yg
Z2VuZXJhdGVkIGZpbGVzIHRvIGNoYW5nZSwgYW5kIHRoaXMgZ2VuZXJhdGVzIHVnbHkgZGlmZnMg
YmVjYXVzZSBldmVyeQorICAgICAgICBnZW5lcmF0ZWQgZmlsZSBpbmNsdWRlcyB0aGUgc2FtZSBj
b3B5cmlnaHQgYmxvY2sgYXQgdGhlIHRvcC4KKworICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNv
bi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1y
ZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0OgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZW51bS12YWx1ZXMu
anNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVu
dC1kb21haW4uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1
bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90
eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQ6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xh
cmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29u
LXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1y
dW50aW1lLWNhc3RzLmpzb24tcmVzdWx0OgorCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtd2l0aC1pbnZhbGlkLXBsYXRm
b3JtLmpzb24tZXJyb3I6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29u
LWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbjogQWRkZWQuCisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1p
bnZhbGlkLXBsYXRmb3JtLmpzb246IEFkZGVkLgorCisgICAgICAgIEFkZCBlcnJvciB0ZXN0IGNh
c2VzIGZvciBpbnZhbGlkIHBsYXRmb3JtcyBpbiBjb21tYW5kcywgdHlwZXMsIGFuZCBldmVudHMu
CisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbi1yZXN1bHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Fs
bC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9hbGwvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMt
cGxhdGZvcm0uanNvbi1yZXN1bHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2lvcy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uOiBBZGRlZC4KKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9pb3MvZXhwZWN0ZWQvZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL21hYy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uOiBB
ZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZXhwZWN0ZWQvZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQ6IEFkZGVkLgorCisgICAgICAg
IEFkZCBhIGJhc2ljIDQtd2F5IHRlc3QgdGhhdCBnZW5lcmF0ZXMgY29kZSBmb3IgZWFjaCBwbGF0
Zm9ybSBmcm9tIHRoZSBzYW1lIHNwZWNpZmljYXRpb24uCisgICAgICAgIFdpdGggJ21hY29zJyBw
bGF0Zm9ybSBmb3IgZWFjaCBkZWZpbml0aW9uLCBvbmx5ICdhbGwnIGFuZCAnbWFjJyBnZW5lcmF0
ZSBhbnl0aGluZyBpbnRlcmVzdGluZy4KKworMjAxNi0xMi0yMSAgQnJpYW4gQnVyZyAgPGJidXJn
QGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiB0ZWFjaCB0aGUgcHJvdG9jb2wg
Z2VuZXJhdG9yIGFib3V0IHBsYXRmb3JtLXNwZWNpZmljIHR5cGVzLCBldmVudHMsIGFuZCBjb21t
YW5kcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2
MDAzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yODcxODk5MD4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgcGFy
c2VyLCBtb2RlbCwgYW5kIGdlbmVyYXRvci1zaWRlIGNoYW5nZXMgdG8gYWNjb3VudCBmb3IKKyAg
ICAgICAgcGxhdGZvcm0tc3BlY2lmaWMgdHlwZXMsIGV2ZW50cywgYW5kIGNvbW1hbmRzLiBUaGUg
J3BsYXRmb3JtJyBwcm9wZXJ0eSBpcyBwYXJzZWQKKyAgICAgICAgZm9yIHRvcC1sZXZlbCBkZWZp
bml0aW9ucyBhbmQgYXNzdW1lZCB0byBiZSB0aGUgJ2dlbmVyaWMnIHBsYXRmb3JtIGlmIG5vbmUg
aXMgc3BlY2lmaWVkLgorCisgICAgICAgIFNpbmNlIHRoZSBnZW5lcmF0b3IncyBwbGF0Zm9ybSBz
ZXR0aW5nIGFjdHMgdG8gZmlsdGVyIGRlZmluaXRpb25zIHdpdGggYW4gaW5jb21wYXRpYmxlIHBs
YXRmb3JtLAorICAgICAgICBhbGwgZ2VuZXJhdG9ycyBtdXN0IGJlIG1vZGlmaWVkIHRvIGNvbnN1
bHQgYSBsaXN0IG9mIGZpbHRlcmVkIHR5cGVzL2NvbW1hbmRzL2V2ZW50cyBmb3IKKyAgICAgICAg
YSBkb21haW4gaW5zdGVhZCBvZiBkaXJlY3RseSBhY2Nlc3NpbmcgRG9tYWluLnt0eXBlX2RlY2xh
cmF0aW9ucywgY29tbWFuZHMsIGV2ZW50c30uIFRvIHByZXZlbnQKKyAgICAgICAgYWNjaWRlbnRh
bCBtaXN1c2UsIGhpZGUgdGhvc2UgZmllbGRzIGJlaGluZCBhY2Nlc3NvcnMgKGUuZy4sIGBhbGxf
dHlwZV9kZWNsYXJhdGlvbnMoKWApIHNvIHRoYXQgdGhleQorICAgICAgICBhcmUgc3RpbGwgYWNj
ZXNzaWJsZSBpZiB0cnVseSBuZWNlc3NhcnksIGJ1dCBub3QgdXNlZCBieSBkZWZhdWx0IGFuZCBj
YXVzZWQgYW4gZXJyb3IgaWYgbm90IG1pZ3JhdGVkLgorCisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHk6CisgICAgICAgIChDcHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdl
bmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21h
aW4pOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVy
YXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAgICAgIChDcHBCYWNrZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX3NtYWxsX2Rpc3BhdGNoZXJfc3dpdGNoX2lt
cGxlbWVudGF0aW9uX2Zvcl9kb21haW4pOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfbGFyZ2VfZGlzcGF0Y2hlcl9zd2l0Y2hf
aW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAg
ICAgIChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZG9tYWluc190b19nZW5l
cmF0ZSk6CisgICAgICAgIChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dl
bmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKENwcEZyb250
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHk6CisgICAgICAg
IChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xh
cmF0aW9ucyk6CisgICAgICAgIChfZ2VuZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbik6CisgICAg
ICAgIChfZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbik6CisgICAgICAgIChfZ2VuZXJhdGVf
Zm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2JpbmRpbmdfdHJhaXRzKToKKyAgICAgICAgKF9nZW5l
cmF0ZV9kZWNsYXJhdGlvbnNfZm9yX2VudW1fY29udmVyc2lvbl9tZXRob2RzKToKKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19p
bXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvci5fZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX21ldGhvZHNfZm9yX2RvbWFpbik6
CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVy
YXRlX29wZW5fZmllbGRfbmFtZXMpOgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluKToKKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMu
cHk6CisgICAgICAgIChKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVf
ZG9tYWluKToKKyAgICAgICAgKEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmRvbWFpbnNfdG9f
Z2VuZXJhdGUpOgorICAgICAgICAoSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuZ2VuZXJhdGVf
ZG9tYWluKToKKyAgICAgICAgKEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmRvbWFpbnNfdG9f
Z2VuZXJhdGUuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbik6IERlbGV0ZWQuCisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHk6CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Iu
ZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFk
ZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNfZm9yd2FyZF9kZWNsYXJhdGlvbnMpOgorICAgICAg
ICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9vYmpjX2hh
bmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24ucHk6CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcik6CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2ltcGxlbWVudGF0aW9u
X2Zvcl9kb21haW4pOgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdl
bmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0
aW9uR2VuZXJhdG9yLl9faW5pdF9fKTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNDb25maWd1cmF0
aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKTogRGVsZXRlZC4KKyAg
ICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZG9tYWluc190
b19nZW5lcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6IERlbGV0ZWQuCisgICAgICAgIChPYmpD
Q29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2lt
cGxlbWVudGF0aW9uX2Zvcl9kb21haW4pOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0NvbmZpZ3Vy
YXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRh
dGlvbl9mb3JfY29tbWFuZCk6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zdWNjZXNzX2Jsb2NrX2Zvcl9jb21tYW5k
KTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5l
cmF0b3IuX2dlbmVyYXRlX3N1Y2Nlc3NfYmxvY2tfZm9yX2NvbW1hbmQuYW5kKTogRGVsZXRlZC4K
KyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVy
YXRlX2NvbnZlcnNpb25zX2Zvcl9jb21tYW5kKTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNDb25m
aWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2NvbnZlcnNpb25zX2Zv
cl9jb21tYW5kLmluX3BhcmFtX2V4cHJlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0Nv
bmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfaW52b2NhdGlvbl9m
b3JfY29tbWFuZCk6IERlbGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5OgorICAgICAgICAoT2JqQ0Nv
bmZpZ3VyYXRpb25IZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKE9i
akNDb25maWd1cmF0aW9uSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9wcm9wZXJ0aWVzX2Zvcl9k
b21haW4pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0NvbmZpZ3Vy
YXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChPYmpDQ29uZmlndXJhdGlv
bkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChPYmpD
Q29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9jb25maWd1cmF0
aW9uX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW5zKToKKyAgICAgICAgKE9iakNDb25maWd1cmF0
aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2l2YXJzKToKKyAgICAgICAgKE9i
akNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2RlYWxsb2Mp
OgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Ip
OiBEZWxldGVkLgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuX19pbml0X18pOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKTogRGVsZXRlZC4KKyAg
ICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmdlbmVy
YXRlX291dHB1dCk6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlv
bl9mb3JfZG9tYWlucyk6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfaXZhcnMpOiBEZWxldGVkLgorICAgICAg
ICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRl
X2RlYWxsb2MpOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfc2V0dGVyX2Zvcl9kb21haW4pOiBE
ZWxldGVkLgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IuX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfZ2V0dGVyX2Zvcl9kb21haW4pOiBEZWxl
dGVkLgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuX3ZhcmlhYmxlX25hbWVfcHJlZml4X2Zvcl9kb21haW4pOiBEZWxldGVkLgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoT2Jq
Q0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVu
dF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9ucyk6CisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weToKKyAgICAgICAgKE9iakNIZWFkZXJH
ZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5lcmF0b3Iu
X2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zKToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5l
cmF0b3IuX2dlbmVyYXRlX2VudW1zKToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5lcmF0b3IuX2dl
bmVyYXRlX3R5cGVzKToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Nv
bW1hbmRfcHJvdG9jb2xzKToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRl
X2V2ZW50X2ludGVyZmFjZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfb2JqY19pbnRlcm5hbF9oZWFkZXIucHk6CisgICAgICAgIChPYmpDSW50ZXJuYWxI
ZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKE9iakNJbnRlcm5hbEhl
YWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9wcml2YXRlX2ludGVyZmFj
ZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19w
cm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hlYWRlci5weToKKyAgICAgICAgKE9iakNQcm90b2Nv
bFR5cGVDb252ZXJzaW9uc0hlYWRlckdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAg
ICAgICAgKE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0hlYWRlckdlbmVyYXRvci5fZ2VuZXJh
dGVfZW51bV9jb252ZXJzaW9uX2Z1bmN0aW9ucyk6CisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVt
ZW50YXRpb24ucHk6CisgICAgICAgIChPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9iakNQcm90
b2NvbFR5cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV90eXBl
X2ZhY3RvcnlfY2F0ZWdvcnlfaW50ZXJmYWNlKToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVD
b252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV90eXBlX2ZhY3Rvcnlf
Y2F0ZWdvcnlfaW1wbGVtZW50YXRpb24pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weToKKyAg
ICAgICAgKE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZG9tYWluc190
b19nZW5lcmF0ZSk6CisgICAgICAgIChPYmpDUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yLmdlbmVyYXRlX3R5cGVfaW1wbGVtZW50YXRpb25zKToKKworICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5OgorICAgICAgICAoR2VuZXJhdG9yLmNh
bl9nZW5lcmF0ZV9wbGF0Zm9ybSk6CisgICAgICAgIChHZW5lcmF0b3IpOgorICAgICAgICAoR2Vu
ZXJhdG9yLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAoR2VuZXJhdG9y
LmNvbW1hbmRzX2Zvcl9kb21haW4pOgorICAgICAgICAoR2VuZXJhdG9yLmV2ZW50c19mb3JfZG9t
YWluKToKKyAgICAgICAgVGhlc2UgYXJlIHRoZSBjb3JlIG1ldGhvZHMgZm9yIGNvbXB1dGluZyB3
aGV0aGVyIGEgZGVmaW5pdGlvbiBjYW4gYmUgdXNlZCBnaXZlbiBhIHRhcmdldCBwbGF0Zm9ybS4K
KworICAgICAgICAoR2VuZXJhdG9yLmNhbGN1bGF0ZV90eXBlc19yZXF1aXJpbmdfc2hhcGVfYXNz
ZXJ0aW9ucyk6CisgICAgICAgIChHZW5lcmF0b3IuX3RyYXZlcnNlX2FuZF9hc3NpZ25fZW51bV92
YWx1ZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5Ogor
ICAgICAgICAoUHJvdG9jb2wucGFyc2VfdHlwZV9kZWNsYXJhdGlvbik6CisgICAgICAgIChQcm90
b2NvbC5wYXJzZV9jb21tYW5kKToKKyAgICAgICAgKFByb3RvY29sLnBhcnNlX2V2ZW50KToKKyAg
ICAgICAgKFByb3RvY29sLnJlc29sdmVfdHlwZXMpOgorCisgICAgICAgIChEb21haW4uX19pbml0
X18pOgorICAgICAgICAoRG9tYWluKToKKyAgICAgICAgKERvbWFpbi5hbGxfdHlwZV9kZWNsYXJh
dGlvbnMpOgorICAgICAgICAoRG9tYWluLmFsbF9jb21tYW5kcyk6CisgICAgICAgIChEb21haW4u
YWxsX2V2ZW50cyk6CisgICAgICAgIEhpZGUgZmllbGRzIGJlaGluZCB0aGVzZSBhY2Nlc3NvcnMg
c28gaXQncyByZWFsbHkgb2J2aW91cyB3aGVuIHdlIGFyZSBpZ25vcmluZyBwbGF0Zm9ybSBmaWx0
ZXJpbmcuCisKKyAgICAgICAgKERvbWFpbi5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyk6CisgICAg
ICAgIChUeXBlRGVjbGFyYXRpb24uX19pbml0X18pOgorICAgICAgICAoQ29tbWFuZC5fX2luaXRf
Xyk6CisgICAgICAgIChFdmVudC5fX2luaXRfXyk6CisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvci5weToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iuc2hv
dWxkX2dlbmVyYXRlX3R5cGVzX2Zvcl9kb21haW4pOgorICAgICAgICAoT2JqQ0dlbmVyYXRvcik6
CisgICAgICAgIChPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9jb21tYW5kc19mb3JfZG9t
YWluKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2V2ZW50c19mb3Jf
ZG9tYWluKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl90
eXBlc19maWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2Vu
ZXJhdGVfZG9tYWluX3R5cGVzX2ZpbHRlci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVzKTog
RGVsZXRlZC4KKyAgICAgICAgKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9j
b21tYW5kX2hhbmRsZXJfZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNHZW5lcmF0b3Iu
c2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyLnNob3VsZF9nZW5l
cmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNHZW5l
cmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRlcik6IERl
bGV0ZWQuCisgICAgICAgIChPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fZXZl
bnRfZGlzcGF0Y2hlcl9maWx0ZXIuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVudF9kaXNwYXRj
aGVyKTogRGVsZXRlZC4KKyAgICAgICAgQ2xlYW4gdXAgc29tZSBtZXNzeSBjb2RlIHRoYXQgZXNz
ZW50aWFsbHkgZGlkIHRoZSBzYW1lIGRlZmluaXRpb24gZmlsdGVyaW5nIGFzIHdlIG11c3QgZG8g
Zm9yIHBsYXRmb3Jtcy4KKyAgICAgICAgVGhpcyB3aWxsIGJlIGVuaGFuY2VkIGluIGEgZnV0dXJl
IHBhdGNoIHNvIHRoYXQgcGxhdGZvcm0gZmlsdGVyaW5nIHdpbGwgdGFrZSBwcmlvcml0eSBvdmVy
IHRoZSB0YXJnZXQgZnJhbWV3b3JrLgorCisgICAgICAgIFRoZSBmb2xsb3dpbmcgcmVzdWx0cyBu
ZWVkIHJlYmFzZWxpbmluZyBiZWNhdXNlIHRoZSBjbGFzcyBuYW1lcyBmb3IgdHdvIGdlbmVyYXRv
cnMgd2VyZSBzd2FwcGVkIGJ5IGFjY2lkZW50LgorICAgICAgICBGaXhpbmcgdGhlIG5hbWVzIGNh
dXNlcyB0aGUgb3JkZXIgb2YgZ2VuZXJhdGVkIGZpbGVzIHRvIGNoYW5nZSwgYW5kIHRoaXMgZ2Vu
ZXJhdGVzIHVnbHkgZGlmZnMgYmVjYXVzZSBldmVyeQorICAgICAgICBnZW5lcmF0ZWQgZmlsZSBp
bmNsdWRlcyB0aGUgc2FtZSBjb3B5cmlnaHQgYmxvY2sgYXQgdGhlIHRvcC4KKworICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1h
c3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJu
LXBhcmFtZXRlcnMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJz
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0
OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBl
LXNldHRlcnMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUu
anNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQ6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1y
ZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0OgorCisyMDE2LTEyLTIx
ICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6
IHRlYWNoIHRoZSBwcm90b2NvbCBnZW5lcmF0b3IgYWJvdXQgcGxhdGZvcm0tc3BlY2lmaWMgdHlw
ZXMsIGV2ZW50cywgYW5kIGNvbW1hbmRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjYwMDMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI4NzE4OTkw
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2Ug
aXQgcG9zc2libGUgdG8gdGVzdCBpbnNwZWN0b3IgcHJvdG9jb2wgZ2VuZXJhdG9yIG91dHB1dCBm
b3IgZGlmZmVyZW50IHBsYXRmb3Jtcy4KKworICAgICAgICBNb3ZlIGV4aXN0aW5nIHRlc3RzIHRv
IHRoZSBnZW5lcmljLyBzdWJkaXJlY3RvcnksIGFzIHRoZXkgYXJlIHRvIGJlIGdlbmVyYXRlZAor
ICAgICAgICB3aXRob3V0IGFueSBzcGVjaWZpYyBwbGF0Zm9ybS4gTGF0ZXIsIHBsYXRmb3JtLXNw
ZWNpZmljIGdlbmVyYXRvciBiZWhhdmlvciB3aWxsIGJlCisgICAgICAgIHRlc3RlZCBieSBjbG9u
aW5nIHRoZSBzYW1lIHRlc3QgdG8gbXVsdGlwbGUgcGxhdGZvcm0gZGlyZWN0b3JpZXMuCisKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31jb21tYW5kcy13
aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHN7LyA9PiAvZ2VuZXJpYy99Y29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJh
bWV0ZXJzLmpzb24KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5l
cmljL31kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31lbnVtLXZhbHVlcy5qc29uCisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXZlbnRzLXdp
dGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbi1yZXN1bHQKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9n
ZW5lcmljL31leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFt
ZXRlcnMuanNvbi1yZXN1bHQKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+
IC9nZW5lcmljL31leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24tcmVzdWx0CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJp
Yy99ZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25h
bC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tYXZhaWxhYmlsaXR5Lmpz
b24tZXJyb3IKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmlj
L31leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVz
Lmpzb24tZXJyb3IKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5l
cmljL31leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXIt
bmFtZXMuanNvbi1lcnJvcgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4g
L2dlbmVyaWMvfWV4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1l
cy5qc29uLWVycm9yCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2Vu
ZXJpYy99ZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1l
cnJvcgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4
cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24tZXJyb3IKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9m
YWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1lcnJvcgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5
cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IKKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9mYWlsLW9uLW51bWJlci10
eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlw
ZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5
cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFy
YXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZl
cmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbi1lcnJvcgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWxv
d2VyY2FzZS1uYW1lLmpzb24tZXJyb3IKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2Ut
aW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVm
ZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgt
ZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFp
bi5qc29uLXJlc3VsdAorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dl
bmVyaWMvfWV4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3Vs
dAorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVj
dGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdAor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdAorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL3R5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb24tcmVzdWx0CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5q
c29uLXJlc3VsdAorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVy
aWMvfWV4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31mYWlsLW9uLWRv
bWFpbi1hdmFpbGFiaWxpdHkuanNvbgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
ey8gPT4gL2dlbmVyaWMvfWZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXIt
bmFtZXMuanNvbgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVy
aWMvfWZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29u
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZmFpbC1v
bi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24KKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRl
Y2xhcmF0aW9ucy5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAv
Z2VuZXJpYy99ZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWZhaWwtb24tZW51bS13
aXRoLW5vLXZhbHVlcy5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9
PiAvZ2VuZXJpYy99ZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcu
anNvbgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWZh
aWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31mYWlsLW9uLXN0cmluZy10eXBl
ZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlw
ZS1tZW1iZXIuanNvbgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dl
bmVyaWMvfWZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29u
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZmFpbC1v
bi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uCisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJj
YXNlLW5hbWUuanNvbgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dl
bmVyaWMvfWZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9u
Lmpzb24KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31m
YWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWdlbmVyYXRlLWRvbWFp
bnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHN7LyA9PiAvZ2VuZXJpYy99c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfXNoYWRvd2Vk
LW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHN7LyA9PiAvZ2VuZXJpYy99dHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10
eXBlLmpzb24KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmlj
L310eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfXR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpz
b24KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL310eXBl
LWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0c3svID0+IC9nZW5lcmljL310eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24K
KworMjAxNi0xMi0xNyAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKworICAgICAgICBX
ZWIgSW5zcGVjdG9yOiB0ZWFjaCB0aGUgcHJvdG9jb2wgZ2VuZXJhdG9yIGFib3V0IHBsYXRmb3Jt
LXNwZWNpZmljIHR5cGVzLCBldmVudHMsIGFuZCBjb21tYW5kcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDAzCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8yODcxODk5MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgYSAtLXBsYXRmb3JtIGFyZ3VtZW50IHRvIGdlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weSBhbmQgcHJvcGFnYXRlCisgICAgICAgIHRoZSBzcGVjaWZpZWQg
cGxhdGZvcm0gdG8gZWFjaCBnZW5lcmF0b3IuIFRoaXMgd2lsbCBiZSB1c2VkIGluIHRoZSBuZXh0
IGZldyBwYXRjaGVzCisgICAgICAgIHRvIGV4Y2x1ZGUgdHlwZXMsIGV2ZW50cywgYW5kIGNvbW1h
bmRzIHRoYXQgYXJlIHVuc3VwcG9ydGVkIGJ5IHRoZSBiYWNrZW5kIHBsYXRmb3JtLgorCisgICAg
ICAgIENvdmVydCBhbGwgc3ViY2xhc3NlcyBvZiBHZW5lcmF0b3IgdG8gcGFzcyBhbG9uZyB0aGVp
ciBwb3NpdGlvbmFsIGFyZ3VtZW50cyBzbyB0aGF0IHdlCisgICAgICAgIGNhbiBlYXNpbHkgY2hh
bmdlIGJhc2UgY2xhc3MgYXJndW1lbnRzIHdpdGhvdXQgZWRpdGluZyBhbGwgZ2VuZXJhdG9yIGNv
bnN0cnVjdG9ycy4KKworICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dl
bmVyYXRvci5weToKKyAgICAgICAgKENwcEdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAgIChDcHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlckhlYWRlckdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weToKKyAg
ICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9faW5pdF9fKToKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5w
eToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fX2luaXRf
Xyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENwcEZyb250ZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFk
ZXIucHk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yLl9faW5pdF9f
KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90
b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5OgorICAgICAgICAo
SlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5OgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9faW5p
dF9fKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
YmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0NvbmZp
Z3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVy
LnB5OgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25IZWFkZXJHZW5lcmF0b3IuX19pbml0X18p
OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25m
aWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamNfaGVhZGVyLnB5OgorICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRv
ci5fX2luaXRfXyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weToKKyAgICAgICAgKE9iakNJbnRlcm5hbEhlYWRlckdl
bmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5OgorICAgICAg
ICAoT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSGVhZGVyR2VuZXJhdG9yLl9faW5pdF9fKToK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9j
b2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKE9iakNQcm90
b2NvbFR5cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xf
dHlwZXNfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChPYmpDUHJvdG9jb2xUeXBlc0ltcGxl
bWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgUGFzcyBhbG9uZyAqYXJncyBp
bnN0ZWFkIG9mIHNpbmdsZSBwb3NpdGlvbmFsIGFyZ3VtZW50cy4KKworICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5OgorICAgICAgICAoR2VuZXJhdG9yLl9f
aW5pdF9fKToKKyAgICAgICAgU2F2ZSB0aGUgdGFyZ2V0IHBsYXRmb3JtIGFuZCBhZGQgYSBnZXR0
ZXIuCisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weToKKyAg
ICAgICAgKFBsYXRmb3JtKToKKyAgICAgICAgKFBsYXRmb3JtLl9faW5pdF9fKToKKyAgICAgICAg
KFBsYXRmb3JtLmZyb21TdHJpbmcpOgorICAgICAgICAoUGxhdGZvcm1zKToKKyAgICAgICAgRGVm
aW5lIHRoZSBhbGxvd2VkIFBsYXRmb3JtIGluc3RhbmNlcyAoaU9TLCBtYWNPUywgYW5kIEFueSku
CisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5
OgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5hbmQuX19pbml0X18pOgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weToKKyAg
ICAgICAgKGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbik6CisgICAgICAgIFBhc3MgYWxvbmcg
KmFyZ3MgaW5zdGVhZCBvZiBzaW5nbGUgcG9zaXRpb25hbCBhcmd1bWVudHMuCisKIDIwMTYtMTIt
MjEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgV2Vi
QXNzZW1ibHk6IEFsbG93IGJyLCBicl9pZiwgYW5kIGJyX3RhYmxlIHRvIGFjdCBhcyBhIHJldHVy
bgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vY3BwX2dlbmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKaW5kZXggNmJiNjZmZDUyZjVlNmMyYmEw
MmZlZWUwMDkyMTVmZWFmOGIwMjUxNS4uYzQ1OWZjYWMzYWY3MDQ5MmQ2YTMwZjM3YmRkZWZmMWFk
YTZmNjdmYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5CkBAIC00NCw4ICs0NCw4
IEBAIF9QUklNSVRJVkVfVE9fQ1BQX05BTUVfTUFQID0gewogfQogCiBjbGFzcyBDcHBHZW5lcmF0
b3IoR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVw
YXRoKToKLSAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxl
cGF0aCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAg
R2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKIAogICAgIGRlZiBwcm90
b2NvbF9uYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5z
ZXR0aW5nKCdjcHBfcHJvdG9jb2xfZ3JvdXAnLCAnJykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5h
dGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9k
aXNwYXRjaGVyX2hlYWRlci5weQppbmRleCAyOTc1NjE1ZTZiMDNiNTVhMTk4NGY4ZDEzMTUyZDY5
NTUzODM2NjdiLi44NmU4NjQ5NzQ1MzZmYzA5ODZlZjFkZTYzNTExNTFkMDU3ZDI1MGNmIDEwMDc1
NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
Y3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0zNyw4ICszNyw4
IEBAIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCiAKIGNsYXNzIENwcEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6Ci0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIENwcEdl
bmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIENwcEdlbmVyYXRvci5fX2lu
aXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNl
bGYpOgogICAgICAgICByZXR1cm4gJyVzQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgnICUg
c2VsZi5wcm90b2NvbF9uYW1lKCkKQEAgLTYzLDExICs2MywxMyBAQCBjbGFzcyBDcHBBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAg
ICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCiAKICAgICBkZWYgX2dlbmVyYXRlX2hhbmRs
ZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAgICAgaWYgbm90
IGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAgY29tbWFuZHMgPSBzZWxmLmNvbW1hbmRzX2Zvcl9k
b21haW4oZG9tYWluKQorCisgICAgICAgIGlmIG5vdCBsZW4oY29tbWFuZHMpOgogICAgICAgICAg
ICAgcmV0dXJuICcnCiAKICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMgPSBbXQotICAgICAg
ICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAgICAgIGZvciBjb21tYW5kIGlu
IGNvbW1hbmRzOgogICAgICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoY29tbWFuZCkpCiAKICAg
ICAgICAgaGFuZGxlcl9hcmdzID0gewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCA4NTAz
ZjZiYjZkZmE0Yjc0MDQ3ODhiYTcyY2E5Y2ZhMWEyM2QyYjc1Li45OTI2MjJiZGQ3OTAyZTgzYWMy
M2U4NzdkOTAxN2MxYTUxNDU2NGNlIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVy
X2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtMzks
MTQgKzM5LDE0IEBAIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCiAKIGNsYXNz
IENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6Ci0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIENwcEdl
bmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIENwcEdlbmVyYXRvci5fX2lu
aXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNl
bGYpOgogICAgICAgICByZXR1cm4gIiVzQmFja2VuZERpc3BhdGNoZXJzLmgiICUgc2VsZi5wcm90
b2NvbF9uYW1lKCkKIAogICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAg
ICByZXR1cm4gZmlsdGVyKGxhbWJkYSBkb21haW46IGxlbihkb21haW4uY29tbWFuZHMpID4gMCwg
R2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBmaWx0
ZXIobGFtYmRhIGRvbWFpbjogbGVuKHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pKSA+
IDAsIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQogCiAgICAgZGVmIGdlbmVy
YXRlX291dHB1dChzZWxmKToKICAgICAgICAgaGVhZGVycyA9IFsKQEAgLTk1LDcgKzk1LDcgQEAg
Y2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToK
ICAgICAgICAgdXNlZF9lbnVtX25hbWVzID0gc2V0KCkKIAogICAgICAgICBjb21tYW5kX2RlY2xh
cmF0aW9ucyA9IFtdCi0gICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKKyAg
ICAgICAgZm9yIGNvbW1hbmQgaW4gc2VsZi5jb21tYW5kc19mb3JfZG9tYWluKGRvbWFpbik6CiAg
ICAgICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaGFu
ZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChjb21tYW5kLCB1c2VkX2VudW1fbmFtZXMpKQog
CiAgICAgICAgIGhhbmRsZXJfYXJncyA9IHsKQEAgLTE5Miw5ICsxOTIsMTAgQEAgY2xhc3MgQ3Bw
QmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAg
ICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0TWFjcm8pCiAKICAgICAgICAgZGVjbGFy
YXRpb25zID0gW10KLSAgICAgICAgaWYgbGVuKGRvbWFpbi5jb21tYW5kcykgPiAwOgorICAgICAg
ICBjb21tYW5kcyA9IHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pCisgICAgICAgIGlm
IGxlbihjb21tYW5kcykgPiAwOgogICAgICAgICAgICAgZGVjbGFyYXRpb25zLmFwcGVuZCgncHJp
dmF0ZTonKQotICAgICAgICBkZWNsYXJhdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9k
aXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kLCBkb21haW4uY29tbWFuZHMpKQorICAg
ICAgICBkZWNsYXJhdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2Rl
Y2xhcmF0aW9uX2Zvcl9jb21tYW5kLCBjb21tYW5kcykpCiAKICAgICAgICAgZGVjbGFyYXRpb25f
YXJncyA9IHsKICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggOWFlY2M0YmNhOTJm
MmRkZjhjZmM0Nzc1ZmE4MDJmZDlkYzgxZDI2Ny4uZmNjZWRjYmE3YWE0ZDQ0MTA2NzA2NTI3ZTQ3
YjRiZDMzZGNlNmE5YyAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5
CkBAIC0zOCwxNCArMzgsMTQgQEAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAK
IAogY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBH
ZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgp
OgotICAgICAgICBDcHBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVw
YXRoKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBD
cHBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQogCiAgICAgZGVmIG91
dHB1dF9maWxlbmFtZShzZWxmKToKICAgICAgICAgcmV0dXJuICIlc0JhY2tlbmREaXNwYXRjaGVy
cy5jcHAiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKIAogICAgIGRlZiBkb21haW5zX3RvX2dlbmVy
YXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmlsdGVyKGxhbWJkYSBkb21haW46IGxlbihkb21h
aW4uY29tbWFuZHMpID4gMCwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisg
ICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbGVuKHNlbGYuY29tbWFuZHNfZm9y
X2RvbWFpbihkb21haW4pKSA+IDAsIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYp
KQogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKICAgICAgICAgc2Vjb25kYXJ5X2hl
YWRlcnMgPSBbCkBAIC05MiwxMiArOTIsMTQgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICB9CiAgICAgICAg
IGltcGxlbWVudGF0aW9ucy5hcHBlbmQoVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25Eb21haW5Db25zdHJ1Y3Rvcikuc3Vic3RpdHV0ZShOb25lLCAq
KmNvbnN0cnVjdG9yX2FyZ3MpKQogCi0gICAgICAgIGlmIGxlbihkb21haW4uY29tbWFuZHMpIDw9
IDU6CisgICAgICAgIGNvbW1hbmRzID0gc2VsZi5jb21tYW5kc19mb3JfZG9tYWluKGRvbWFpbikK
KworICAgICAgICBpZiBsZW4oY29tbWFuZHMpIDw9IDU6CiAgICAgICAgICAgICBpbXBsZW1lbnRh
dGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3NtYWxsX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxl
bWVudGF0aW9uX2Zvcl9kb21haW4oZG9tYWluKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAg
IGltcGxlbWVudGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfbGFyZ2VfZGlzcGF0Y2hlcl9z
d2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbihkb21haW4pKQogCi0gICAgICAgIGZvciBj
b21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAgZm9yIGNvbW1hbmQgaW4gY29tbWFu
ZHM6CiAgICAgICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgogICAgICAgICAgICAgICAgIGlt
cGxlbWVudGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXN5bmNfZGlzcGF0Y2hlcl9jbGFz
c19mb3JfZG9tYWluKGNvbW1hbmQsIGRvbWFpbikpCiAgICAgICAgICAgICBpbXBsZW1lbnRhdGlv
bnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2Nv
bW1hbmQoY29tbWFuZCwgZG9tYWluKSkKQEAgLTEwNSwxMCArMTA3LDEyIEBAIGNsYXNzIENwcEJh
Y2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAg
ICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG5c
bicuam9pbihpbXBsZW1lbnRhdGlvbnMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9zbWFsbF9kaXNw
YXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Cisg
ICAgICAgIGNvbW1hbmRzID0gc2VsZi5jb21tYW5kc19mb3JfZG9tYWluKGRvbWFpbikKKwogICAg
ICAgICBjYXNlcyA9IFtdCi0gICAgICAgIGNhc2VzLmFwcGVuZCgnICAgIGlmIChtZXRob2QgPT0g
IiVzIiknICUgZG9tYWluLmNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSkKLSAgICAgICAgY2FzZXMu
YXBwZW5kKCcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7JyAlIGRv
bWFpbi5jb21tYW5kc1swXS5jb21tYW5kX25hbWUpCi0gICAgICAgIGZvciBjb21tYW5kIGluIGRv
bWFpbi5jb21tYW5kc1sxOl06CisgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgIGlmIChtZXRob2Qg
PT0gIiVzIiknICUgY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lKQorICAgICAgICBjYXNlcy5hcHBl
bmQoJyAgICAgICAgJXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsnICUgY29tbWFu
ZHNbMF0uY29tbWFuZF9uYW1lKQorICAgICAgICBmb3IgY29tbWFuZCBpbiBjb21tYW5kc1sxOl06
CiAgICAgICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICBlbHNlIGlmIChtZXRob2QgPT0gIiVzIikn
ICUgY29tbWFuZC5jb21tYW5kX25hbWUpCiAgICAgICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAg
ICAgJXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsnICUgY29tbWFuZC5jb21tYW5k
X25hbWUpCiAKQEAgLTEyMCw4ICsxMjQsMTAgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gVGVt
cGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25TbWFsbFN3
aXRjaCkuc3Vic3RpdHV0ZShOb25lLCAqKnN3aXRjaF9hcmdzKQogCiAgICAgZGVmIF9nZW5lcmF0
ZV9sYXJnZV9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKHNlbGYs
IGRvbWFpbik6CisgICAgICAgIGNvbW1hbmRzID0gc2VsZi5jb21tYW5kc19mb3JfZG9tYWluKGRv
bWFpbikKKwogICAgICAgICBjYXNlcyA9IFtdCi0gICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFp
bi5jb21tYW5kczoKKyAgICAgICAgZm9yIGNvbW1hbmQgaW4gY29tbWFuZHM6CiAgICAgICAgICAg
ICBhcmdzID0gewogICAgICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9u
YW1lLAogICAgICAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1l
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggZjU5Yjk4NGVkNzJmYjc0YTYzMDJlMGU1
YmFiY2I5MjZiZmUyZTkwOC4uZWQ1OGIxZTJmYzlhMWU2YjFmMzQ0ODE1MmVlZjdmZmYyNDQzZDU4
ZSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtMzksMTQgKzM5LDE0IEBAIGxvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCiAKIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0
Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBDcHBHZW5lcmF0b3IuX19pbml0X18o
c2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJn
cywgKiprd2FyZ3MpOgorICAgICAgICBDcHBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgKmFyZ3Ms
ICoqa3dhcmdzKQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKICAgICAgICAgcmV0
dXJuICIlc0Zyb250ZW5kRGlzcGF0Y2hlcnMuaCIgJSBzZWxmLnByb3RvY29sX25hbWUoKQogCiAg
ICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIo
bGFtYmRhIGRvbWFpbjogbGVuKGRvbWFpbi5ldmVudHMpID4gMCwgR2VuZXJhdG9yLmRvbWFpbnNf
dG9fZ2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjog
bGVuKHNlbGYuZXZlbnRzX2Zvcl9kb21haW4oZG9tYWluKSkgPiAwLCBHZW5lcmF0b3IuZG9tYWlu
c190b19nZW5lcmF0ZShzZWxmKSkKIAogICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CiAg
ICAgICAgIGhlYWRlcnMgPSBbCkBAIC05MCw4ICs5MCw5IEBAIGNsYXNzIENwcEZyb250ZW5kRGlz
cGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogCiAgICAgICAgIHVzZWRfZW51
bV9uYW1lcyA9IHNldChbXSkKIAorICAgICAgICBldmVudHMgPSBzZWxmLmV2ZW50c19mb3JfZG9t
YWluKGRvbWFpbikKICAgICAgICAgZXZlbnRfZGVjbGFyYXRpb25zID0gW10KLSAgICAgICAgZm9y
IGV2ZW50IGluIGRvbWFpbi5ldmVudHM6CisgICAgICAgIGZvciBldmVudCBpbiBldmVudHM6CiAg
ICAgICAgICAgICBldmVudF9kZWNsYXJhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Rpc3Bh
dGNoZXJfZGVjbGFyYXRpb25fZm9yX2V2ZW50KGV2ZW50LCBkb21haW4sIHVzZWRfZW51bV9uYW1l
cykpCiAKICAgICAgICAgaGFuZGxlcl9hcmdzID0gewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weQppbmRleCA3MTY3MmM0NmMxMDlkNzU5MjRjNjlhMGI2YjUzNTJjNmQ3
YjAzZGMyLi4wZDA4MDY5MDM5MzA2ZTAwNmEzOGU4OGE1MjgxOTlhM2RjM2EzMmY5IDEwMDc1NQot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBf
ZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMzgsMTQgKzM4LDE0IEBA
IGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCiAKIGNsYXNzIENwcEZyb250ZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6Ci0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIENwcEdlbmVy
YXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIENwcEdlbmVyYXRvci5fX2luaXRf
XyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYp
OgogICAgICAgICByZXR1cm4gIiVzRnJvbnRlbmREaXNwYXRjaGVycy5jcHAiICUgc2VsZi5wcm90
b2NvbF9uYW1lKCkKIAogICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAg
ICByZXR1cm4gZmlsdGVyKGxhbWJkYSBkb21haW46IGxlbihkb21haW4uZXZlbnRzKSA+IDAsIEdl
bmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAgICAgICByZXR1cm4gZmlsdGVy
KGxhbWJkYSBkb21haW46IGxlbihzZWxmLmV2ZW50c19mb3JfZG9tYWluKGRvbWFpbikpID4gMCwg
R2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCiAKICAgICBkZWYgZ2VuZXJhdGVf
b3V0cHV0KHNlbGYpOgogICAgICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsKQEAgLTY5LDcgKzY5
LDggQEAgY2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Io
Q3BwR2VuZXJhdG9yKToKIAogICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgogICAgICAgICBpbXBsZW1lbnRhdGlvbnMg
PSBbXQotICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2ZW50czoKKyAgICAgICAgZXZlbnRz
ID0gc2VsZi5ldmVudHNfZm9yX2RvbWFpbihkb21haW4pCisgICAgICAgIGZvciBldmVudCBpbiBl
dmVudHM6CiAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2V2ZW50KGV2ZW50LCBkb21haW4pKQogCiAg
ICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xu
XG4nLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBl
c19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CmluZGV4IDA3MDRiM2Ux
ZTBkMWRiYjUyODNhYjdiNmFmNjE0YjExOTIwYjgxNjUuLjFmOTFjZGQwZjg4Nzc2YTZiOGU3NTUy
ZTRiMDBhMTVjNGJjZTUxMzIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIu
cHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQpAQCAtNDAsOCArNDAsOCBAQCBs
b2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIAogCiBjbGFzcyBDcHBQcm90b2NvbFR5
cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYs
IG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIENwcEdlbmVyYXRvci5fX2luaXRfXyhz
ZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdz
LCAqKmt3YXJncyk6CisgICAgICAgIENwcEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCAqYXJncywg
Kiprd2FyZ3MpCiAKICAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgogICAgICAgICByZXR1
cm4gIiVzUHJvdG9jb2xPYmplY3RzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKQEAgLTgzLDcg
KzgzLDcgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0
b3IpOgogICAgICAgICBzZWN0aW9ucyA9IFtdCiAKICAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21h
aW5zOgotICAgICAgICAgICAgZGVjbGFyYXRpb25fdHlwZXMgPSBbZGVjbC50eXBlIGZvciBkZWNs
IGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uc10KKyAgICAgICAgICAgIGRlY2xhcmF0aW9uX3R5
cGVzID0gW2RlY2wudHlwZSBmb3IgZGVjbCBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9k
b21haW4oZG9tYWluKV0KICAgICAgICAgICAgIG9iamVjdF90eXBlcyA9IGZpbHRlcihsYW1iZGEg
X3R5cGU6IGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpLCBkZWNsYXJhdGlvbl90eXBlcykK
ICAgICAgICAgICAgIGVudW1fdHlwZXMgPSBmaWx0ZXIobGFtYmRhIF90eXBlOiBpc2luc3RhbmNl
KF90eXBlLCBFbnVtVHlwZSksIGRlY2xhcmF0aW9uX3R5cGVzKQogICAgICAgICAgICAgc29ydGVk
KG9iamVjdF90eXBlcywga2V5PW1ldGhvZGNhbGxlcigncmF3X25hbWUnKSkKQEAgLTEyMSw4ICsx
MjEsOSBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6CiAvLyBFbmQgb2YgdHlwZWRlZnMuIiIiICUgJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCiAKICAg
ICBkZWYgX2dlbmVyYXRlX3R5cGVkZWZzX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKLSAgICAg
ICAgcHJpbWl0aXZlX2RlY2xhcmF0aW9ucyA9IGZpbHRlcihsYW1iZGEgZGVjbDogaXNpbnN0YW5j
ZShkZWNsLnR5cGUsIEFsaWFzZWRUeXBlKSwgZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKQotICAg
ICAgICBhcnJheV9kZWNsYXJhdGlvbnMgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IGlzaW5zdGFuY2Uo
ZGVjbC50eXBlLCBBcnJheVR5cGUpLCBkb21haW4udHlwZV9kZWNsYXJhdGlvbnMpCisgICAgICAg
IHR5cGVfZGVjbGFyYXRpb25zID0gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRv
bWFpbikKKyAgICAgICAgcHJpbWl0aXZlX2RlY2xhcmF0aW9ucyA9IGZpbHRlcihsYW1iZGEgZGVj
bDogaXNpbnN0YW5jZShkZWNsLnR5cGUsIEFsaWFzZWRUeXBlKSwgdHlwZV9kZWNsYXJhdGlvbnMp
CisgICAgICAgIGFycmF5X2RlY2xhcmF0aW9ucyA9IGZpbHRlcihsYW1iZGEgZGVjbDogaXNpbnN0
YW5jZShkZWNsLnR5cGUsIEFycmF5VHlwZSksIHR5cGVfZGVjbGFyYXRpb25zKQogICAgICAgICBp
ZiBsZW4ocHJpbWl0aXZlX2RlY2xhcmF0aW9ucykgPT0gMCBhbmQgbGVuKGFycmF5X2RlY2xhcmF0
aW9ucykgPT0gMDoKICAgICAgICAgICAgIHJldHVybiAnJwogCkBAIC0xNzUsNyArMTc2LDggQEAg
Y2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAg
IGRlZiBfZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgogICAgICAg
ICBzZWN0aW9ucyA9IFtdCiAKLSAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gZG9tYWlu
LnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICB0eXBlX2RlY2xhcmF0aW9ucyA9IHNlbGYudHlw
ZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pCisgICAgICAgIGZvciB0eXBlX2RlY2xh
cmF0aW9uIGluIHR5cGVfZGVjbGFyYXRpb25zOgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0
eXBlX2RlY2xhcmF0aW9uLnR5cGUsIEVudW1UeXBlKToKICAgICAgICAgICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX2RlY2xhcmF0aW9uKHR5cGVf
ZGVjbGFyYXRpb24pKQogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGVfZGVjbGFyYXRp
b24udHlwZSwgT2JqZWN0VHlwZSk6CkBAIC0zMzYsNyArMzM4LDggQEAgY2xhc3MgQ3BwUHJvdG9j
b2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICB0eXBlX2FyZ3Vt
ZW50cyA9IFtdCiAKICAgICAgICAgZm9yIGRvbWFpbiBpbiBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJh
dGUoKToKLSAgICAgICAgICAgIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZSA9IGZpbHRlcihsYW1i
ZGEgZGVjbDogc2VsZi50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKSwgZG9t
YWluLnR5cGVfZGVjbGFyYXRpb25zKQorICAgICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBz
ZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQorICAgICAgICAgICAgZGVj
bGFyYXRpb25zX3RvX2dlbmVyYXRlID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBzZWxmLnR5cGVfbmVl
ZHNfc2hhcGVfYXNzZXJ0aW9ucyhkZWNsLnR5cGUpLCB0eXBlX2RlY2xhcmF0aW9ucykKIAogICAg
ICAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRl
OgogICAgICAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5
cGVfbWVtYmVyczoKQEAgLTM4NSw3ICszODgsOCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVh
ZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICByZXR1cm4gaXNpbnN0YW5j
ZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIHR5cGVfbWVtYmVyLnR5cGUuaXNfYW5v
bnltb3VzCiAKICAgICAgICAgZm9yIGRvbWFpbiBpbiBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUo
KToKLSAgICAgICAgICAgIGRlY2xhcmF0aW9uX3R5cGVzID0gW2RlY2wudHlwZSBmb3IgZGVjbCBp
biBkb21haW4udHlwZV9kZWNsYXJhdGlvbnNdCisgICAgICAgICAgICB0eXBlX2RlY2xhcmF0aW9u
cyA9IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pCisgICAgICAgICAg
ICBkZWNsYXJhdGlvbl90eXBlcyA9IFtkZWNsLnR5cGUgZm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJh
dGlvbnNdCiAgICAgICAgICAgICBvYmplY3RfdHlwZXMgPSBmaWx0ZXIobGFtYmRhIF90eXBlOiBp
c2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSwgZGVjbGFyYXRpb25fdHlwZXMpCiAgICAgICAg
ICAgICBlbnVtX3R5cGVzID0gZmlsdGVyKGxhbWJkYSBfdHlwZTogaXNpbnN0YW5jZShfdHlwZSwg
RW51bVR5cGUpLCBkZWNsYXJhdGlvbl90eXBlcykKICAgICAgICAgICAgIGlmIGxlbihvYmplY3Rf
dHlwZXMpICsgbGVuKGVudW1fdHlwZXMpID09IDA6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xf
dHlwZXNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRp
b24ucHkKaW5kZXggN2JiYjkwMzI3YzQ2YjhiOGI0NmJiMDYxMWZjNjY4NGRhZjQ5OWJjNi4uZjMw
MmE3MzQyZWEyYWUzNzczOTViNDRmNjRjNGFkZDAzNGE2MjJjMyAxMDA3NTUKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3By
b3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19p
bXBsZW1lbnRhdGlvbi5weQpAQCAtMzksOCArMzksOCBAQCBsb2cgPSBsb2dnaW5nLmdldExvZ2dl
cignZ2xvYmFsJykKIAogCiBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5l
cmF0b3IoQ3BwR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0
X2ZpbGVwYXRoKToKLSAgICAgICAgQ3BwR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBp
bnB1dF9maWxlcGF0aCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToK
KyAgICAgICAgQ3BwR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKIAog
ICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiAiJXNQcm90b2Nv
bE9iamVjdHMuY3BwIiAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCkBAIC0xMTgsNyArMTE4LDggQEAg
Y2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6CiAgICAgICAgICAgICBdKQogICAgICAgICAgICAgcmV0dXJuIGJvZHlfbGluZXMKIAotICAg
ICAgICBkZWNsYXJhdGlvbl90eXBlcyA9IFtkZWNsLnR5cGUgZm9yIGRlY2wgaW4gZG9tYWluLnR5
cGVfZGVjbGFyYXRpb25zXQorICAgICAgICB0eXBlX2RlY2xhcmF0aW9ucyA9IHNlbGYudHlwZV9k
ZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pCisgICAgICAgIGRlY2xhcmF0aW9uX3R5cGVz
ID0gW2RlY2wudHlwZSBmb3IgZGVjbCBpbiB0eXBlX2RlY2xhcmF0aW9uc10KICAgICAgICAgb2Jq
ZWN0X3R5cGVzID0gZmlsdGVyKGxhbWJkYSBfdHlwZTogaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0
VHlwZSksIGRlY2xhcmF0aW9uX3R5cGVzKQogICAgICAgICBlbnVtX3R5cGVzID0gZmlsdGVyKGxh
bWJkYSBfdHlwZTogaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpLCBkZWNsYXJhdGlvbl90eXBl
cykKICAgICAgICAgaWYgbGVuKG9iamVjdF90eXBlcykgKyBsZW4oZW51bV90eXBlcykgPT0gMDoK
QEAgLTE1OCw3ICsxNTksOCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVyYXRlX29wZW5fZmllbGRfbmFt
ZXMoc2VsZik6CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgZm9yIGRvbWFpbiBpbiBzZWxm
LmRvbWFpbnNfdG9fZ2VuZXJhdGUoKToKLSAgICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9u
IGluIGZpbHRlcihsYW1iZGEgZGVjbDogR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRzKGRl
Y2wudHlwZSksIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9ucyk6CisgICAgICAgICAgICB0eXBlX2Rl
Y2xhcmF0aW9ucyA9IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pCisg
ICAgICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBmaWx0ZXIobGFtYmRhIGRlY2w6IEdl
bmVyYXRvci50eXBlX2hhc19vcGVuX2ZpZWxkcyhkZWNsLnR5cGUpLCB0eXBlX2RlY2xhcmF0aW9u
cyk6CiAgICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHNvcnRlZCh0eXBlX2RlY2xh
cmF0aW9uLnR5cGVfbWVtYmVycywga2V5PWxhbWJkYSBtZW1iZXI6IG1lbWJlci5tZW1iZXJfbmFt
ZSk6CiAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWUgPSAnOjonLmpvaW4oWydJbnNwZWN0
b3InLCAnUHJvdG9jb2wnLCBkb21haW4uZG9tYWluX25hbWUsIHVjZmlyc3QodHlwZV9kZWNsYXJh
dGlvbi50eXBlX25hbWUpLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKV0pCiAgICAg
ICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnY29uc3QgY2hhciogJXMgPSAiJXMiOycgJSAo
ZmllbGRfbmFtZSwgdHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKQpAQCAtMTY3LDcgKzE2OSw4IEBA
IGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0
b3IpOgogCiAgICAgZGVmIF9nZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluKHNlbGYsIGRvbWFp
bik6CiAgICAgICAgIHNlY3Rpb25zID0gW10KLSAgICAgICAgZGVjbGFyYXRpb25zX3RvX2dlbmVy
YXRlID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBzZWxmLnR5cGVfbmVlZHNfc2hhcGVfYXNzZXJ0aW9u
cyhkZWNsLnR5cGUpLCBkb21haW4udHlwZV9kZWNsYXJhdGlvbnMpCisgICAgICAgIHR5cGVfZGVj
bGFyYXRpb25zID0gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbikKKyAg
ICAgICAgZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBzZWxm
LnR5cGVfbmVlZHNfc2hhcGVfYXNzZXJ0aW9ucyhkZWNsLnR5cGUpLCB0eXBlX2RlY2xhcmF0aW9u
cykKIAogICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlvbnNfdG9fZ2Vu
ZXJhdGU6CiAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50
eXBlX21lbWJlcnM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNfYmFj
a2VuZF9jb21tYW5kcy5weQppbmRleCAzMzkyYzc4NDU5M2M5MTQ3Y2JmODQ1NjdhODE3NTgwYzdm
OTZjYjFkLi41NGJkYWFkYmU5OWViYjE4YTc2NGM1OWVhZjkwMzIzNzU5NjRlYWVlIDEwMDc1NQot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkK
QEAgLTEsNiArMSw2IEBACiAjIS91c3IvYmluL2VudiBweXRob24KICMKLSMgQ29weXJpZ2h0IChj
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAy
MDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChj
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMK
ICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CkBAIC0zNywxOCArMzcsMTkgQEAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIo
J2dsb2JhbCcpCiAKIAogY2xhc3MgSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IoR2VuZXJhdG9y
KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAg
ICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgR2VuZXJhdG9yLl9f
aW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKIAogICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUo
c2VsZik6CiAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzIgogCi0g
ICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIGRlZiBzaG91bGRfZ2Vu
ZXJhdGVfZG9tYWluKGRvbWFpbik6Ci0gICAgICAgICAgICBkb21haW5fZW51bV90eXBlcyA9IGZp
bHRlcihsYW1iZGEgZGVjbGFyYXRpb246IGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51
bVR5cGUpLCBkb21haW4udHlwZV9kZWNsYXJhdGlvbnMpCi0gICAgICAgICAgICByZXR1cm4gbGVu
KGRvbWFpbi5jb21tYW5kcykgPiAwIG9yIGxlbihkb21haW4uZXZlbnRzKSA+IDAgb3IgbGVuKGRv
bWFpbl9lbnVtX3R5cGVzKSA+IDAKKyAgICBkZWYgc2hvdWxkX2dlbmVyYXRlX2RvbWFpbihzZWxm
LCBkb21haW4pOgorICAgICAgICB0eXBlX2RlY2xhcmF0aW9ucyA9IHNlbGYudHlwZV9kZWNsYXJh
dGlvbnNfZm9yX2RvbWFpbihkb21haW4pCisgICAgICAgIGRvbWFpbl9lbnVtX3R5cGVzID0gZmls
dGVyKGxhbWJkYSBkZWNsYXJhdGlvbjogaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBFbnVt
VHlwZSksIHR5cGVfZGVjbGFyYXRpb25zKQorICAgICAgICByZXR1cm4gbGVuKHNlbGYuY29tbWFu
ZHNfZm9yX2RvbWFpbihkb21haW4pKSA+IDAgb3IgbGVuKHNlbGYuZXZlbnRzX2Zvcl9kb21haW4o
ZG9tYWluKSkgPiAwIG9yIGxlbihkb21haW5fZW51bV90eXBlcykgPiAwCiAKLSAgICAgICAgcmV0
dXJuIGZpbHRlcihzaG91bGRfZ2VuZXJhdGVfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19n
ZW5lcmF0ZShzZWxmKSkKKyAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKKyAgICAg
ICAgcmV0dXJuIGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9kb21haW4sIEdlbmVyYXRvci5k
b21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxm
KToKICAgICAgICAgc2VjdGlvbnMgPSBbXQpAQCAtNjQsMTEgKzY1LDE1IEBAIGNsYXNzIEpTQmFj
a2VuZENvbW1hbmRzR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAKICAgICAgICAgbGluZXMuYXBwZW5k
KCcvLyAlKGRvbWFpbilzLicgJSBhcmdzKQogCi0gICAgICAgIGhhc19hc3luY19jb21tYW5kcyA9
IGFueShtYXAobGFtYmRhIGNvbW1hbmQ6IGNvbW1hbmQuaXNfYXN5bmMsIGRvbWFpbi5jb21tYW5k
cykpCi0gICAgICAgIGlmIGxlbihkb21haW4uZXZlbnRzKSA+IDAgb3IgaGFzX2FzeW5jX2NvbW1h
bmRzOgorICAgICAgICB0eXBlX2RlY2xhcmF0aW9ucyA9IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNf
Zm9yX2RvbWFpbihkb21haW4pCisgICAgICAgIGNvbW1hbmRzID0gc2VsZi5jb21tYW5kc19mb3Jf
ZG9tYWluKGRvbWFpbikKKyAgICAgICAgZXZlbnRzID0gc2VsZi5ldmVudHNfZm9yX2RvbWFpbihk
b21haW4pCisKKyAgICAgICAgaGFzX2FzeW5jX2NvbW1hbmRzID0gYW55KG1hcChsYW1iZGEgY29t
bWFuZDogY29tbWFuZC5pc19hc3luYywgY29tbWFuZHMpKQorICAgICAgICBpZiBsZW4oZXZlbnRz
KSA+IDAgb3IgaGFzX2FzeW5jX2NvbW1hbmRzOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyJShkb21haW4pc0Rpc3BhdGNoZXIgPSBJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICIl
KGRvbWFpbilzIik7JyAlIGFyZ3MpCiAKLSAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIGRvbWFp
bi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIHR5cGVfZGVj
bGFyYXRpb25zOgogICAgICAgICAgICAgaWYgZGVjbGFyYXRpb24udHlwZS5pc19lbnVtKCk6CiAg
ICAgICAgICAgICAgICAgZW51bV9hcmdzID0gewogICAgICAgICAgICAgICAgICAgICAnZG9tYWlu
JzogZG9tYWluLmRvbWFpbl9uYW1lLApAQCAtOTEsNyArOTYsNyBAQCBjbGFzcyBKU0JhY2tlbmRD
b21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICBkZWYgaXNfYW5vbnltb3VzX2Vu
dW1fcGFyYW0ocGFyYW0pOgogICAgICAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2UocGFyYW0udHlw
ZSwgRW51bVR5cGUpIGFuZCBwYXJhbS50eXBlLmlzX2Fub255bW91cwogCi0gICAgICAgIGZvciBl
dmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICBmb3IgZXZlbnQgaW4gZXZlbnRzOgogICAg
ICAgICAgICAgZm9yIHBhcmFtIGluIGZpbHRlcihpc19hbm9ueW1vdXNfZW51bV9wYXJhbSwgZXZl
bnQuZXZlbnRfcGFyYW1ldGVycyk6CiAgICAgICAgICAgICAgICAgZW51bV9hcmdzID0gewogICAg
ICAgICAgICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1lLApAQCAtMTA3LDcg
KzExMiw3IEBAIGNsYXNzIEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJFdmVudCgiJShkb21haW4pcy4lKGV2ZW50TmFtZSlzIiwgWyUocGFyYW1zKXNdKTsn
ICUgZXZlbnRfYXJncykKIAotICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6
CisgICAgICAgIGZvciBjb21tYW5kIGluIGNvbW1hbmRzOgogICAgICAgICAgICAgZGVmIGdlbmVy
YXRlX3BhcmFtZXRlcl9vYmplY3QocGFyYW1ldGVyKToKICAgICAgICAgICAgICAgICBvcHRpb25h
bF9zdHJpbmcgPSAidHJ1ZSIgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgImZhbHNlIgog
ICAgICAgICAgICAgICAgIHBhaXJzID0gW10KQEAgLTEyNCw3ICsxMjksNyBAQCBjbGFzcyBKU0Jh
Y2tlbmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiJShk
b21haW4pcy4lKGNvbW1hbmROYW1lKXMiLCBbJShjYWxsUGFyYW1zKXNdLCBbJShyZXR1cm5QYXJh
bXMpc10pOycgJSBjb21tYW5kX2FyZ3MpCiAKLSAgICAgICAgaWYgZG9tYWluLmNvbW1hbmRzIG9y
IGRvbWFpbi5ldmVudHM6CisgICAgICAgIGlmIGNvbW1hbmRzIG9yIGV2ZW50czoKICAgICAgICAg
ICAgIGFjdGl2YXRlX2FyZ3MgPSB7CiAgICAgICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5k
b21haW5fbmFtZSwKICAgICAgICAgICAgICAgICAnYXZhaWxhYmlsaXR5JzogZG9tYWluLmF2YWls
YWJpbGl0eSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCBhNTUyYjQ2ZjI5ZjM1NTY2
MTAwOTc1NmQ3MTdiMWE2MTQ3YTBhMjNhLi4wNTMxZWQ1M2JlN2U5MmYxNjEwMDgwMGI1OTFmODFi
ZjU3ZTBlNTBmIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC00MCwxNCArNDAsMTQg
QEAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKIAogY2xhc3MgT2JqQ0JhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBPYmpDR2VuZXJhdG9y
Ll9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgT2JqQ0dlbmVyYXRvci5fX2luaXRfXyhz
ZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgog
ICAgICAgICByZXR1cm4gJyVzQmFja2VuZERpc3BhdGNoZXJzLmgnICUgc2VsZi5wcm90b2NvbF9u
YW1lKCkKIAogICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1
cm4gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9jb21tYW5kX2hh
bmRsZXJfZmlsdGVyKHNlbGYubW9kZWwoKSksIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRl
KHNlbGYpKQorICAgICAgICByZXR1cm4gZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX2NvbW1h
bmRzX2Zvcl9kb21haW4sIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQogCiAg
ICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKICAgICAgICAgaGVhZGVycyA9IFsKQEAgLTcx
LDE2ICs3MSwxNyBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Io
T2JqQ0dlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV9vYmpjX2ZvcndhcmRfZGVjbGFyYXRp
b25zKHNlbGYpOgogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGZvciBkb21haW4gaW4gc2Vs
Zi5kb21haW5zX3RvX2dlbmVyYXRlKCk6Ci0gICAgICAgICAgICBpZiBkb21haW4uY29tbWFuZHM6
CisgICAgICAgICAgICBpZiBzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKToKICAgICAg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0Bwcm90b2NvbCAlcyVzRG9tYWluSGFuZGxlcjsnICUg
KHNlbGYub2JqY19wcmVmaXgoKSwgZG9tYWluLmRvbWFpbl9uYW1lKSkKICAgICAgICAgcmV0dXJu
ICdcbicuam9pbihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfb2JqY19oYW5kbGVyX2RlY2xh
cmF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGlmIG5vdCBkb21haW4u
Y29tbWFuZHM6CisgICAgICAgIGNvbW1hbmRzID0gc2VsZi5jb21tYW5kc19mb3JfZG9tYWluKGRv
bWFpbikKKyAgICAgICAgaWYgbm90IGNvbW1hbmRzOgogICAgICAgICAgICAgcmV0dXJuICcnCiAK
ICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMgPSBbXQotICAgICAgICBmb3IgY29tbWFuZCBp
biBkb21haW4uY29tbWFuZHM6CisgICAgICAgIGZvciBjb21tYW5kIGluIGNvbW1hbmRzOgogICAg
ICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX29iamNf
aGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChjb21tYW5kKSkKIAogICAgICAgICBoYW5k
bGVyX2FyZ3MgPSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5Cmlu
ZGV4IDlkNWYwMzkxZTVhNWUyZWFiZDI5MTVmMWUwNmYwYjBlMTFlNWQ5YzAuLjY5MzhjYTNlNzRh
ZGI0ODY0YmNkYmVkMmIxMGU3ODZmZWQ2OGRjYTkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uLnB5CkBAIC0zOSwxNSArMzksMTUgQEAgZnJvbSBvYmpjX2dlbmVyYXRv
cl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRl
cwogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKIAotY2xhc3MgT2JqQ0NvbmZp
Z3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKLSAgICBkZWYg
X19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAgT2JqQ0dlbmVy
YXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCitjbGFzcyBPYmpDQmFj
a2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgT2JqQ0dlbmVy
YXRvci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgb3V0cHV0X2Zp
bGVuYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gJyVzQmFja2VuZERpc3BhdGNoZXJzLm1tJyAl
IHNlbGYucHJvdG9jb2xfbmFtZSgpCiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxm
KToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9k
b21haW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBHZW5lcmF0b3IuZG9t
YWluc190b19nZW5lcmF0ZShzZWxmKSkKKyAgICAgICAgcmV0dXJuIGZpbHRlcihzZWxmLnNob3Vs
ZF9nZW5lcmF0ZV9jb21tYW5kc19mb3JfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5l
cmF0ZShzZWxmKSkKIAogICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CiAgICAgICAgIHNl
Y29uZGFyeV9oZWFkZXJzID0gWwpAQCAtNzAsMTEgKzcwLDEzIEBAIGNsYXNzIE9iakNDb25maWd1
cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIHJl
dHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKIAogICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9p
bXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGlmIG5vdCBk
b21haW4uY29tbWFuZHM6CisgICAgICAgIGNvbW1hbmRzID0gc2VsZi5jb21tYW5kc19mb3JfZG9t
YWluKGRvbWFpbikKKworICAgICAgICBpZiBub3QgY29tbWFuZHM6CiAgICAgICAgICAgICByZXR1
cm4gJycKIAogICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucyA9IFtdCi0gICAgICAgIGZvciBj
b21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAgZm9yIGNvbW1hbmQgaW4gY29tbWFu
ZHM6CiAgICAgICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChkb21haW4sIGNvbW1hbmQpKQog
CiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4oY29tbWFuZF9kZWNsYXJhdGlvbnMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hl
YWRlci5weQppbmRleCA1ZTljOWUwMDA4MzgyOTY1M2M3MmQxZDIyN2ViNGQyYTA5OGUzM2NiLi5h
MjMyZTJjZTQzOWEzZDc2M2ZiZmI5NGI5MTRiNmU3ZGZlNDFiNzBiIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpj
X2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9oZWFkZXIu
cHkKQEAgLTM3LDggKzM3LDggQEAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAK
IAogY2xhc3MgT2JqQ0NvbmZpZ3VyYXRpb25IZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAg
IE9iakNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBPYmpDR2VuZXJh
dG9yLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKIAogICAgIGRlZiBvdXRwdXRfZmls
ZW5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiAnJXNDb25maWd1cmF0aW9uLmgnICUgc2VsZi5w
cm90b2NvbF9uYW1lKCkKQEAgLTUyLDkgKzUyLDYgQEAgY2xhc3MgT2JqQ0NvbmZpZ3VyYXRpb25I
ZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICAnaW5jbHVkZXMnOiAn
XG4nLmpvaW4oWycjaW1wb3J0ICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBoZWFkZXJzXSksCiAg
ICAgICAgIH0KIAotICAgICAgICBzZWxmLl9jb21tYW5kX2ZpbHRlciA9IE9iakNHZW5lcmF0b3Iu
c2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyKHNlbGYubW9kZWwo
KSkKLSAgICAgICAgc2VsZi5fZXZlbnRfZmlsdGVyID0gT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2Vu
ZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJfZmlsdGVyKHNlbGYubW9kZWwoKSkKLQogICAg
ICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKICAgICAgICAgc2VjdGlv
bnMgPSBbXQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkp
CkBAIC04MCw4ICs3Nyw5IEBAIGNsYXNzIE9iakNDb25maWd1cmF0aW9uSGVhZGVyR2VuZXJhdG9y
KE9iakNHZW5lcmF0b3IpOgogICAgICAgICB9CiAKICAgICAgICAgbGluZXMgPSBbXQotICAgICAg
ICBpZiBkb21haW4uY29tbWFuZHMgYW5kIHNlbGYuX2NvbW1hbmRfZmlsdGVyKGRvbWFpbik6CisK
KyAgICAgICAgaWYgc2VsZi5zaG91bGRfZ2VuZXJhdGVfY29tbWFuZHNfZm9yX2RvbWFpbihkb21h
aW4pOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKFRlbXBsYXRlKE9iakNUZW1wbGF0ZXMuQ29u
ZmlndXJhdGlvbkNvbW1hbmRQcm9wZXJ0eSkuc3Vic3RpdHV0ZShOb25lLCAqKnByb3BlcnR5X2Fy
Z3MpKQotICAgICAgICBpZiBkb21haW4uZXZlbnRzIGFuZCBzZWxmLl9ldmVudF9maWx0ZXIoZG9t
YWluKToKKyAgICAgICAgaWYgc2VsZi5zaG91bGRfZ2VuZXJhdGVfZXZlbnRzX2Zvcl9kb21haW4o
ZG9tYWluKToKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVz
LkNvbmZpZ3VyYXRpb25FdmVudFByb3BlcnR5KS5zdWJzdGl0dXRlKE5vbmUsICoqcHJvcGVydHlf
YXJncykpCiAgICAgICAgIHJldHVybiBsaW5lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0
aW9uX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9u
LnB5CmluZGV4IDJhNDgyMmRmYzJlNzFkYmYxNWVmZTgyNjZmMjAxMzVjNDc5ZmU1NDAuLjkxMGJj
YmFiMTM1MGQwNzZlOTVlNTNkYzBhYjk4ZGM0N2IyYmNkMzQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29u
ZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faW1w
bGVtZW50YXRpb24ucHkKQEAgLTM2LDkgKzM2LDkgQEAgZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1w
bGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKIAotY2xhc3MgT2JqQ0JhY2tlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6Ci0gICAgZGVmIF9f
aW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIE9iakNHZW5lcmF0
b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorY2xhc3MgT2JqQ0NvbmZp
Z3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgT2JqQ0dlbmVyYXRvci5f
X2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgb3V0cHV0X2ZpbGVuYW1l
KHNlbGYpOgogICAgICAgICByZXR1cm4gJyVzQ29uZmlndXJhdGlvbi5tbScgJSBzZWxmLnByb3Rv
Y29sX25hbWUoKQpAQCAtNTgsOSArNTgsNiBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgICdzZWNv
bmRhcnlJbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbXBvcnQgJXMnICUgaGVhZGVyIGZvciBoZWFk
ZXIgaW4gc2Vjb25kYXJ5X2hlYWRlcnNdKSwKICAgICAgICAgfQogCi0gICAgICAgIHNlbGYuX2Nv
bW1hbmRfZmlsdGVyID0gT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1h
bmRfaGFuZGxlcl9maWx0ZXIoc2VsZi5tb2RlbCgpKQotICAgICAgICBzZWxmLl9ldmVudF9maWx0
ZXIgPSBPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hl
cl9maWx0ZXIoc2VsZi5tb2RlbCgpKQotCiAgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNf
dG9fZ2VuZXJhdGUoKQogICAgICAgICBzZWN0aW9ucyA9IFtdCiAgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKQEAgLTkwLDEwICs4NywxMCBAQCBjbGFzcyBP
YmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9y
KToKICAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX2RlYWxsb2MoZG9tYWlucykp
CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKICAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5z
OgotICAgICAgICAgICAgaWYgZG9tYWluLmNvbW1hbmRzIGFuZCBzZWxmLl9jb21tYW5kX2ZpbHRl
cihkb21haW4pOgorICAgICAgICAgICAgaWYgc2VsZi5zaG91bGRfZ2VuZXJhdGVfY29tbWFuZHNf
Zm9yX2RvbWFpbihkb21haW4pOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9n
ZW5lcmF0ZV9oYW5kbGVyX3NldHRlcl9mb3JfZG9tYWluKGRvbWFpbikpCiAgICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICAgICAgaWYgZG9tYWluLmV2ZW50cyBhbmQgc2Vs
Zi5fZXZlbnRfZmlsdGVyKGRvbWFpbik6CisgICAgICAgICAgICBpZiBzZWxmLnNob3VsZF9nZW5l
cmF0ZV9ldmVudHNfZm9yX2RvbWFpbihkb21haW4pOgogICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX2dldHRlcl9mb3JfZG9tYWluKGRv
bWFpbikpCiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogICAgICAgICBsaW5lcy5h
cHBlbmQoJ0BlbmQnKQpAQCAtMTAyLDExICs5OSwxMSBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICBkZWYgX2dl
bmVyYXRlX2l2YXJzKHNlbGYsIGRvbWFpbnMpOgogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAg
IGZvciBkb21haW4gaW4gZG9tYWluczoKLSAgICAgICAgICAgIGlmIGRvbWFpbi5jb21tYW5kcyBh
bmQgc2VsZi5fY29tbWFuZF9maWx0ZXIoZG9tYWluKToKKyAgICAgICAgICAgIGlmIHNlbGYuc2hv
dWxkX2dlbmVyYXRlX2NvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgICAg
ICBvYmpjX2NsYXNzX25hbWUgPSAnJXMlc0RvbWFpbkhhbmRsZXInICUgKHNlbGYub2JqY19wcmVm
aXgoKSwgZG9tYWluLmRvbWFpbl9uYW1lKQogICAgICAgICAgICAgICAgIGl2YXJfbmFtZSA9ICdf
JXNIYW5kbGVyJyAlIE9iakNHZW5lcmF0b3IudmFyaWFibGVfbmFtZV9wcmVmaXhfZm9yX2RvbWFp
bihkb21haW4pCiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWQ8JXM+ICVzOycg
JSAob2JqY19jbGFzc19uYW1lLCBpdmFyX25hbWUpKQotICAgICAgICAgICAgaWYgZG9tYWluLmV2
ZW50cyBhbmQgc2VsZi5fZXZlbnRfZmlsdGVyKGRvbWFpbik6CisgICAgICAgICAgICBpZiBzZWxm
LnNob3VsZF9nZW5lcmF0ZV9ldmVudHNfZm9yX2RvbWFpbihkb21haW4pOgogICAgICAgICAgICAg
ICAgIG9iamNfY2xhc3NfbmFtZSA9ICclcyVzRG9tYWluRXZlbnREaXNwYXRjaGVyJyAlIChzZWxm
Lm9iamNfcHJlZml4KCksIGRvbWFpbi5kb21haW5fbmFtZSkKICAgICAgICAgICAgICAgICBpdmFy
X25hbWUgPSAnXyVzRXZlbnREaXNwYXRjaGVyJyAlIE9iakNHZW5lcmF0b3IudmFyaWFibGVfbmFt
ZV9wcmVmaXhfZm9yX2RvbWFpbihkb21haW4pCiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgJXMgKiVzOycgJSAob2JqY19jbGFzc19uYW1lLCBpdmFyX25hbWUpKQpAQCAtMTE3LDkg
KzExNCw5IEBAIGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKHZvaWQpZGVhbGxv
YycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgneycpCiAgICAgICAgIGZvciBkb21haW4gaW4gZG9t
YWluczoKLSAgICAgICAgICAgIGlmIGRvbWFpbi5jb21tYW5kcyBhbmQgc2VsZi5fY29tbWFuZF9m
aWx0ZXIoZG9tYWluKToKKyAgICAgICAgICAgIGlmIHNlbGYuc2hvdWxkX2dlbmVyYXRlX2NvbW1h
bmRzX2Zvcl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICBbXyVzSGFuZGxlciByZWxlYXNlXTsnICUgT2JqQ0dlbmVyYXRvci52YXJpYWJsZV9uYW1lX3By
ZWZpeF9mb3JfZG9tYWluKGRvbWFpbikpCi0gICAgICAgICAgICBpZiBkb21haW4uZXZlbnRzIGFu
ZCBzZWxmLl9ldmVudF9maWx0ZXIoZG9tYWluKToKKyAgICAgICAgICAgIGlmIHNlbGYuc2hvdWxk
X2dlbmVyYXRlX2V2ZW50c19mb3JfZG9tYWluKGRvbWFpbik6CiAgICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgW18lc0V2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsnICUgT2JqQ0dlbmVy
YXRvci52YXJpYWJsZV9uYW1lX3ByZWZpeF9mb3JfZG9tYWluKGRvbWFpbikpCiAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIFtzdXBlciBkZWFsbG9jXTsnKQogICAgICAgICBsaW5lcy5hcHBlbmQo
J30nKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDE0
MDdhNjBhYjY4NzAyNTcyODFlODBhNWMwMWY2ZGYyMmVkM2ViNWEuLjcyMmQ1ZDM5MjJmOGI5NGMz
NmU5NWM3NzRmNjhlN2MyZGM5MTU1ZjYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHkKQEAgLTM4LDE0ICszOCwxNCBAQCBsb2cgPSBsb2dnaW5nLmdldExvZ2dl
cignZ2xvYmFsJykKIAogCiBjbGFzcyBPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVs
LCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIE9iakNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwg
bW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKipr
d2FyZ3MpOgorICAgICAgICBPYmpDR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3
YXJncykKIAogICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiAn
JXNFdmVudERpc3BhdGNoZXJzLm1tJyAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCiAKICAgICBkZWYg
ZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihPYmpDR2Vu
ZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIoc2Vs
Zi5tb2RlbCgpKSwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisgICAgICAg
IHJldHVybiBmaWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfZXZlbnRzX2Zvcl9kb21haW4sIEdl
bmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQogCiAgICAgZGVmIGdlbmVyYXRlX291
dHB1dChzZWxmKToKICAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCkBAIC02Nyw3ICs2Nyw3
IEBAIGNsYXNzIE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihP
YmpDR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQogCiAg
ICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9ucyhzZWxmLCBk
b21haW4pOgotICAgICAgICBpZiBub3QgZG9tYWluLmV2ZW50czoKKyAgICAgICAgaWYgbm90IHNl
bGYuc2hvdWxkX2dlbmVyYXRlX2V2ZW50c19mb3JfZG9tYWluKGRvbWFpbik6CiAgICAgICAgICAg
ICByZXR1cm4gJycKIAogICAgICAgICBsaW5lcyA9IFtdCkBAIC04Nyw3ICs4Nyw3IEBAIGNsYXNz
IE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJh
dG9yKToKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcmV0dXJuIHNlbGY7JykKICAgICAgICAg
bGluZXMuYXBwZW5kKCd9JykKICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICBmb3Ig
ZXZlbnQgaW4gZG9tYWluLmV2ZW50czoKKyAgICAgICAgZm9yIGV2ZW50IGluIHNlbGYuZXZlbnRz
X2Zvcl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5l
cmF0ZV9ldmVudChkb21haW4sIGV2ZW50KSkKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykK
ICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaGVhZGVyLnB5
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfb2JqY19oZWFkZXIucHkKaW5kZXggZjViYTdhYmFmYjEzMTRjN2NkOGFiMjg4ZDAxNzZjZjMy
ZGQyYWJjMy4uMmU1MmZlNmU3YzRkNjQyNDM3OTBjZjUxNTcwMDJiNjI5Y2Y0ZTBkZSAxMDA3NTUK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqY19oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkKQEAgLTQ0LDggKzQ0LDgg
QEAgZGVmIGFkZF9uZXdsaW5lKGxpbmVzKToKIAogCiBjbGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9y
KE9iakNHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmls
ZXBhdGgpOgotICAgICAgICBPYmpDR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1
dF9maWxlcGF0aCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAg
ICAgICAgT2JqQ0dlbmVyYXRvci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAg
ICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gJyVzLmgnICUgc2Vs
Zi5wcm90b2NvbF9uYW1lKCkKQEAgLTYwLDkgKzYwLDkgQEAgY2xhc3MgT2JqQ0hlYWRlckdlbmVy
YXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgfQogCiAgICAgICAgIGRvbWFpbnMgPSBzZWxm
LmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQotICAgICAgICB0eXBlX2RvbWFpbnMgPSBmaWx0ZXIoT2Jq
Q0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVzX2ZpbHRlcihzZWxmLm1vZGVs
KCkpLCBkb21haW5zKQotICAgICAgICBjb21tYW5kX2RvbWFpbnMgPSBmaWx0ZXIoT2JqQ0dlbmVy
YXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1hbmRfaGFuZGxlcl9maWx0ZXIoc2VsZi5t
b2RlbCgpKSwgZG9tYWlucykKLSAgICAgICAgZXZlbnRfZG9tYWlucyA9IGZpbHRlcihPYmpDR2Vu
ZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIoc2Vs
Zi5tb2RlbCgpKSwgZG9tYWlucykKKyAgICAgICAgdHlwZV9kb21haW5zID0gZmlsdGVyKHNlbGYu
c2hvdWxkX2dlbmVyYXRlX3R5cGVzX2Zvcl9kb21haW4sIGRvbWFpbnMpCisgICAgICAgIGNvbW1h
bmRfZG9tYWlucyA9IGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9jb21tYW5kc19mb3JfZG9t
YWluLCBkb21haW5zKQorICAgICAgICBldmVudF9kb21haW5zID0gZmlsdGVyKHNlbGYuc2hvdWxk
X2dlbmVyYXRlX2V2ZW50c19mb3JfZG9tYWluLCBkb21haW5zKQogCiAgICAgICAgICMgRklYTUU6
IDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzgyMjI+IFdlYiBJbnNwZWN0b3I6IFJlZHVjZSB1bm5l
Y2Vzc2FyeSBlbnVtcy90eXBlcyBnZW5lcmF0ZWQgaW4gT2JqQyBQcm90b2NvbCBJbnRlcmZhY2Vz
CiAgICAgICAgICMgQ3VycmVudGx5IHdlIGdlbmVyYXRlIGVudW1zL3R5cGVzIGZvciBhbGwgdHlw
ZXMgaW4gdGhlIHR5cGVfZG9tYWlucy4gRm9yIHRoZSBidWlsdC1pbgpAQCAtODUsNyArODUsNyBA
QCBjbGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogCiAgICAgZGVmIF9n
ZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyhzZWxmLCBkb21haW4pOgogICAgICAgICBsaW5l
cyA9IFtdCi0gICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlv
bnM6CisgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zv
cl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKGRlY2xhcmF0aW9u
LnR5cGUsIE9iamVjdFR5cGUpKToKICAgICAgICAgICAgICAgICBvYmpjX25hbWUgPSBzZWxmLm9i
amNfbmFtZV9mb3JfdHlwZShkZWNsYXJhdGlvbi50eXBlKQogICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnQGNsYXNzICVzOycgJSBvYmpjX25hbWUpCkBAIC05NSw3ICs5NSw3IEBAIGNsYXNz
IE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzID0gW10K
IAogICAgICAgICAjIFR5cGUgZW51bXMgYW5kIG1lbWJlciBlbnVtcy4KLSAgICAgICAgZm9yIGRl
Y2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgZm9yIGRlY2xh
cmF0aW9uIGluIHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pOgogICAg
ICAgICAgICAgaWYgaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBFbnVtVHlwZSk6CiAgICAg
ICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCiAgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9kZWNsYXJhdGlvbihkb21haW4s
IGRlY2xhcmF0aW9uKSkKQEAgLTEwNiw3ICsxMDYsNyBAQCBjbGFzcyBPYmpDSGVhZGVyR2VuZXJh
dG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9tZW1iZXIoZG9tYWluLCBkZWNsYXJh
dGlvbiwgbWVtYmVyKSkKIAogICAgICAgICAjIEFub255bW91cyBjb21tYW5kIGVudW1zLgotICAg
ICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAgICAgIGZvciBjb21tYW5k
IGluIHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pOgogICAgICAgICAgICAgZm9yIHBh
cmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKICAgICAgICAgICAgICAgICBpZiBp
c2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlz
X2Fub255bW91czoKICAgICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCkBAIC0x
MTcsNyArMTE3LDcgQEAgY2xhc3MgT2JqQ0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToK
ICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91
c19lbnVtX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1l
dGVyKSkKIAogICAgICAgICAjIEFub255bW91cyBldmVudCBlbnVtcy4KLSAgICAgICAgZm9yIGV2
ZW50IGluIGRvbWFpbi5ldmVudHM6CisgICAgICAgIGZvciBldmVudCBpbiBzZWxmLmV2ZW50c19m
b3JfZG9tYWluKGRvbWFpbik6CiAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2
ZW50X3BhcmFtZXRlcnM6CiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIu
dHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXM6CiAgICAgICAg
ICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQpAQCAtMTI4LDcgKzEyOCw3IEBAIGNsYXNz
IE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV90
eXBlcyhzZWxmLCBkb21haW4pOgogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgICMgVHlwZSBp
bnRlcmZhY2VzLgotICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFy
YXRpb25zOgorICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gc2VsZi50eXBlX2RlY2xhcmF0aW9u
c19mb3JfZG9tYWluKGRvbWFpbik6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRlY2xhcmF0
aW9uLnR5cGUsIE9iamVjdFR5cGUpOgogICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVz
KQogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV90eXBlX2ludGVy
ZmFjZShkb21haW4sIGRlY2xhcmF0aW9uKSkKQEAgLTE5MiwxMSArMTkyLDExIEBAIGNsYXNzIE9i
akNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAgICBkZWYgX2dlbmVyYXRlX2Nv
bW1hbmRfcHJvdG9jb2xzKHNlbGYsIGRvbWFpbik6CiAgICAgICAgIGxpbmVzID0gW10KLSAgICAg
ICAgaWYgZG9tYWluLmNvbW1hbmRzOgorICAgICAgICBpZiBzZWxmLmNvbW1hbmRzX2Zvcl9kb21h
aW4oZG9tYWluKToKICAgICAgICAgICAgIG9iamNfbmFtZSA9ICclcyVzRG9tYWluSGFuZGxlcicg
JSAoc2VsZi5vYmpjX3ByZWZpeCgpLCBkb21haW4uZG9tYWluX25hbWUpCiAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ0Bwcm90b2NvbCAlcyA8TlNPYmplY3Q+JyAlIG9iamNfbmFtZSkKICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnQHJlcXVpcmVkJykKLSAgICAgICAgICAgIGZvciBjb21tYW5k
IGluIGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAgICAgIGZvciBjb21tYW5kIGluIHNlbGYuY29t
bWFuZHNfZm9yX2RvbWFpbihkb21haW4pOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9zaW5nbGVfY29tbWFuZF9wcm90b2NvbChkb21haW4sIGNvbW1hbmQpKQog
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKICAgICAgICAgcmV0dXJuICdcbicuam9p
bihsaW5lcykKQEAgLTIxOCwxMSArMjE4LDEyIEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3Io
T2JqQ0dlbmVyYXRvcik6CiAKICAgICBkZWYgX2dlbmVyYXRlX2V2ZW50X2ludGVyZmFjZXMoc2Vs
ZiwgZG9tYWluKToKICAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBpZiBkb21haW4uZXZlbnRz
OgorICAgICAgICBldmVudHMgPSBzZWxmLmV2ZW50c19mb3JfZG9tYWluKGRvbWFpbikKKyAgICAg
ICAgaWYgbGVuKGV2ZW50cyk6CiAgICAgICAgICAgICBvYmpjX25hbWUgPSAnJXMlc0RvbWFpbkV2
ZW50RGlzcGF0Y2hlcicgJSAoc2VsZi5vYmpjX3ByZWZpeCgpLCBkb21haW4uZG9tYWluX25hbWUp
CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKScpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbnRlcmZhY2UgJXMgOiBO
U09iamVjdCcgJSBvYmpjX25hbWUpCi0gICAgICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2
ZW50czoKKyAgICAgICAgICAgIGZvciBldmVudCBpbiBldmVudHM6CiAgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3NpbmdsZV9ldmVudF9pbnRlcmZhY2UoZG9tYWlu
LCBldmVudCkpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQogICAgICAgICByZXR1
cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19pbnRlcm5hbF9oZWFkZXIucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weQppbmRleCA0NzAwNmNmYzVkYmY3ZjEzMjczNDdiMmUy
MTc3NWFiMmIyNmNiNGMxLi45ZjA2Y2VkNDAyNDkwYTE1MTRlNTM0NmM1ZDNjOGJlMjA4OGY4YmNm
IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2ludGVybmFs
X2hlYWRlci5weQpAQCAtMzcsOCArMzcsOCBAQCBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xv
YmFsJykKIAogCiBjbGFzcyBPYmpDSW50ZXJuYWxIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRv
cik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAg
ICAgIE9iakNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBPYmpDR2Vu
ZXJhdG9yLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKIAogICAgIGRlZiBvdXRwdXRf
ZmlsZW5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiAnJXNJbnRlcm5hbC5oJyAlIHNlbGYucHJv
dG9jb2xfbmFtZSgpCkBAIC01NSw4ICs1NSw3IEBAIGNsYXNzIE9iakNJbnRlcm5hbEhlYWRlckdl
bmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9p
bihbJyNpbXBvcnQgJyArIGhlYWRlciBmb3IgaGVhZGVyIGluIHNvcnRlZChoZWFkZXJzKV0pLAog
ICAgICAgICB9CiAKLSAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgp
Ci0gICAgICAgIGV2ZW50X2RvbWFpbnMgPSBmaWx0ZXIoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2Vu
ZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJfZmlsdGVyKHNlbGYubW9kZWwoKSksIGRvbWFp
bnMpCisgICAgICAgIGV2ZW50X2RvbWFpbnMgPSBmaWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVf
ZXZlbnRzX2Zvcl9kb21haW4sIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKQogCiAgICAgICAg
IHNlY3Rpb25zID0gW10KICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGlj
ZW5zZSgpKQpAQCAtNjcsNyArNjYsNyBAQCBjbGFzcyBPYmpDSW50ZXJuYWxIZWFkZXJHZW5lcmF0
b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAgICBkZWYgX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJf
cHJpdmF0ZV9pbnRlcmZhY2VzKHNlbGYsIGRvbWFpbik6CiAgICAgICAgIGxpbmVzID0gW10KLSAg
ICAgICAgaWYgZG9tYWluLmV2ZW50czoKKyAgICAgICAgaWYgbGVuKHNlbGYuZXZlbnRzX2Zvcl9k
b21haW4oZG9tYWluKSk6CiAgICAgICAgICAgICBvYmpjX25hbWUgPSAnJXMlc0RvbWFpbkV2ZW50
RGlzcGF0Y2hlcicgJSAoc2VsZi5vYmpjX3ByZWZpeCgpLCBkb21haW4uZG9tYWluX25hbWUpCiAg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbnRlcmZhY2UgJXMgKFByaXZhdGUpJyAlIG9iamNf
bmFtZSkKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNv
bnRyb2xsZXI7JykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19o
ZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5CmluZGV4
IDU1ZGFiZjQ2ZTllNTNlNTJmM2JlNDllZjZkZmY5YWQwMDU3YzJmYTguLjk3ZmUwYTU5NGEyZDA1
YmFlNTcwMTU3MmI5ZTc4MjhjNzE1NGY2OGEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlw
ZV9jb252ZXJzaW9uc19oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNp
b25zX2hlYWRlci5weQpAQCAtNDQsMTQgKzQ0LDE0IEBAIGRlZiBhZGRfbmV3bGluZShsaW5lcyk6
CiAKIAogY2xhc3MgT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSGVhZGVyR2VuZXJhdG9yKE9i
akNHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBh
dGgpOgotICAgICAgICBPYmpDR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9m
aWxlcGF0aCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAg
ICAgT2JqQ0dlbmVyYXRvci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBk
ZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gJyVzVHlwZUNvbnZlcnNp
b25zLmgnICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKIAogICAgIGRlZiBkb21haW5zX3RvX2dlbmVy
YXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dl
bmVyYXRlX2RvbWFpbl90eXBlc19maWx0ZXIoc2VsZi5tb2RlbCgpKSwgR2VuZXJhdG9yLmRvbWFp
bnNfdG9fZ2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBmaWx0ZXIoc2VsZi5zaG91bGRf
Z2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUo
c2VsZikpCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBoZWFkZXJz
ID0gWwpAQCAtNzcsNyArNzcsNyBAQCBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNI
ZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzID0gW10KIAogICAg
ICAgICAjIFR5cGUgZW51bXMgYW5kIG1lbWJlciBlbnVtcy4KLSAgICAgICAgZm9yIGRlY2xhcmF0
aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgZm9yIGRlY2xhcmF0aW9u
IGluIHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pOgogICAgICAgICAg
ICAgaWYgaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBFbnVtVHlwZSk6CiAgICAgICAgICAg
ICAgICAgYWRkX25ld2xpbmUobGluZXMpCiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNl
bGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX2RlY2xhcmF0aW9uKGRv
bWFpbiwgZGVjbGFyYXRpb24pKQpAQCAtODgsNyArODgsNyBAQCBjbGFzcyBPYmpDUHJvdG9jb2xU
eXBlQ29udmVyc2lvbnNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1f
Y29udmVyc2lvbl9mb3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJlcikpCiAKICAg
ICAgICAgIyBBbm9ueW1vdXMgY29tbWFuZCBlbnVtcy4KLSAgICAgICAgZm9yIGNvbW1hbmQgaW4g
ZG9tYWluLmNvbW1hbmRzOgorICAgICAgICBmb3IgY29tbWFuZCBpbiBzZWxmLmNvbW1hbmRzX2Zv
cl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5j
YWxsX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UocGFyYW1ldGVy
LnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzKToKICAgICAg
ICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCkBAIC05OSw3ICs5OSw3IEBAIGNsYXNz
IE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9y
KToKICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255
bW91c19lbnVtX2NvbnZlcnNpb25fZm9yX3BhcmFtZXRlcihkb21haW4sIGNvbW1hbmQuY29tbWFu
ZF9uYW1lLCBwYXJhbWV0ZXIpKQogCiAgICAgICAgICMgQW5vbnltb3VzIGV2ZW50IGVudW1zLgot
ICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2ZW50czoKKyAgICAgICAgZm9yIGV2ZW50IGlu
IHNlbGYuZXZlbnRzX2Zvcl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgIGZvciBwYXJhbWV0
ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKICAgICAgICAgICAgICAgICBpZiAoaXNpbnN0
YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9u
eW1vdXMpOgogICAgICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5weSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5weQppbmRleCA5NzIy
YWE0YWVjZTQxMTFiZDliZjExMjU5YjEyNTgxYTcwMjJkMzQwLi5iNTFmZjU2NWY0M2YyZjlhZDk0
NTM2OTYzODBmYzM2ZWE2N2E1MjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29u
dmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZl
cnNpb25zX2ltcGxlbWVudGF0aW9uLnB5CkBAIC00MywxNCArNDMsMTQgQEAgZGVmIGFkZF9uZXds
aW5lKGxpbmVzKToKIAogCiBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwg
bW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAgT2JqQ0dlbmVyYXRvci5fX2luaXRfXyhz
ZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdz
LCAqKmt3YXJncyk6CisgICAgICAgIE9iakNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgKmFyZ3Ms
ICoqa3dhcmdzKQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKICAgICAgICAgcmV0
dXJuICclc1R5cGVDb252ZXJzaW9ucy5tbScgJSBzZWxmLnByb3RvY29sX25hbWUoKQogCiAgICAg
ZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoT2Jq
Q0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVzX2ZpbHRlcihzZWxmLm1vZGVs
KCkpLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKyAgICAgICAgcmV0dXJu
IGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV90eXBlc19mb3JfZG9tYWluLCBHZW5lcmF0b3Iu
ZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKIAogICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2Vs
Zik6CiAgICAgICAgIHNlY29uZGFyeV9oZWFkZXJzID0gWwpAQCAtODAsNyArODAsNyBAQCBjbGFz
cyBPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpD
R2VuZXJhdG9yKToKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGludGVyZmFjZSAlc1R5cGVD
b252ZXJzaW9ucyAoJXNEb21haW4pJyAlIChzZWxmLnByb3RvY29sX25hbWUoKSwgZG9tYWluLmRv
bWFpbl9uYW1lKSkKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKIAotICAgICAgICAgICAg
Zm9yIGRlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAg
IGZvciBkZWNsYXJhdGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9t
YWluKToKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdHlwZV9m
YWN0b3J5X21ldGhvZF9kZWNsYXJhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkKIAogICAgICAg
ICAgICAgYWRkX25ld2xpbmUobGluZXMpCkBAIC0xMDQsNyArMTA0LDcgQEAgY2xhc3MgT2JqQ1By
b3RvY29sVHlwZUNvbnZlcnNpb25zSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRv
cik6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbXBsZW1lbnRhdGlvbiAlc1R5cGVDb252
ZXJzaW9ucyAoJXNEb21haW4pJyAlIChzZWxmLnByb3RvY29sX25hbWUoKSwgZG9tYWluLmRvbWFp
bl9uYW1lKSkKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKIAotICAgICAgICAgICAgZm9y
IGRlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgIGZv
ciBkZWNsYXJhdGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWlu
KToKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdHlwZV9mYWN0
b3J5X21ldGhvZF9pbXBsZW1lbnRhdGlvbihkb21haW4sIGRlY2xhcmF0aW9uKSkKICAgICAgICAg
ICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnQGVu
ZCcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQppbmRleCAzNjYzZDZkOGUzZDc0
NDg3YzZjNjU2M2JiMGZmZGI2NTg0MjY5YTJiLi5jZTlhZTM0OTlhMjY3MjY4MTM0ODA3NzVlNWZj
ZjUyNjg4NzgzMDdiIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0
aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKQEAgLTQ0
LDE0ICs0NCwxNCBAQCBkZWYgYWRkX25ld2xpbmUobGluZXMpOgogCiAKIGNsYXNzIE9iakNQcm90
b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6Ci0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIE9iakNHZW5l
cmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBPYmpDR2VuZXJhdG9yLl9faW5p
dF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKIAogICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2Vs
Zik6CiAgICAgICAgIHJldHVybiAnJXNUeXBlcy5tbScgJSBzZWxmLnByb3RvY29sX25hbWUoKQog
CiAgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0
ZXIoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVzX2ZpbHRlcihzZWxm
Lm1vZGVsKCkpLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKyAgICAgICAg
cmV0dXJuIGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV90eXBlc19mb3JfZG9tYWluLCBHZW5l
cmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKIAogICAgIGRlZiBnZW5lcmF0ZV9vdXRw
dXQoc2VsZik6CiAgICAgICAgIHNlY29uZGFyeV9oZWFkZXJzID0gWwpAQCAtODEsNyArODEsNyBA
QCBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5l
cmF0b3IpOgogCiAgICAgZGVmIGdlbmVyYXRlX3R5cGVfaW1wbGVtZW50YXRpb25zKHNlbGYsIGRv
bWFpbik6CiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIGRv
bWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIHNlbGYu
dHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pOgogICAgICAgICAgICAgaWYgKGlz
aW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlwZSkpOgogICAgICAgICAgICAgICAg
IGFkZF9uZXdsaW5lKGxpbmVzKQogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLmdl
bmVyYXRlX3R5cGVfaW1wbGVtZW50YXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0b3IucHkKaW5kZXggODU1MDI3Mjk3ZTVlZThiMGRlYzdjNzg5MDIwMDZmMGI1NjE4
MDM1My4uZTE1NmIxZGJmMTQ0ODI1OTU5NWEyY2I4NzE0NGI0YTI2MzBiNjM5NCAxMDA3NTUKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dG9yLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRvci5weQpAQCAtMzAsNyArMzAsNyBAQCBpbXBvcnQgcmUKIGZyb20gc3RyaW5n
IGltcG9ydCBUZW1wbGF0ZQogCiBmcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVy
YXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKLWZyb20gbW9kZWxzIGltcG9ydCBQcmltaXRpdmVU
eXBlLCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3
b3JrcworZnJvbSBtb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5cGUsIE9iamVjdFR5cGUsIEFycmF5
VHlwZSwgRW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzLCBQbGF0Zm9ybXMKIAogbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTc2LDE3ICs3NiwzMyBAQCBfVFlQ
RVNfV0lUSF9PUEVOX0ZJRUxEUyA9IHNldChbCiAKIAogY2xhc3MgR2VuZXJhdG9yOgotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBtb2RlbCwgcGxhdGZvcm0sIGlucHV0X2ZpbGVwYXRoKToKICAgICAgICAgc2VsZi5f
bW9kZWwgPSBtb2RlbAorICAgICAgICBzZWxmLl9wbGF0Zm9ybSA9IHBsYXRmb3JtCiAgICAgICAg
IHNlbGYuX2lucHV0X2ZpbGVwYXRoID0gaW5wdXRfZmlsZXBhdGgKICAgICAgICAgc2VsZi5fc2V0
dGluZ3MgPSB7fQogCiAgICAgZGVmIG1vZGVsKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5f
bW9kZWwKIAorICAgIGRlZiBwbGF0Zm9ybShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Bs
YXRmb3JtCisKICAgICBkZWYgc2V0X2dlbmVyYXRvcl9zZXR0aW5nKHNlbGYsIGtleSwgdmFsdWUp
OgogICAgICAgICBzZWxmLl9zZXR0aW5nc1trZXldID0gdmFsdWUKIAorICAgIGRlZiBjYW5fZ2Vu
ZXJhdGVfcGxhdGZvcm0oc2VsZiwgbW9kZWxfcGxhdGZvcm0pOgorICAgICAgICByZXR1cm4gbW9k
ZWxfcGxhdGZvcm0gaXMgUGxhdGZvcm1zLkdlbmVyaWMgb3Igc2VsZi5fcGxhdGZvcm0gaXMgUGxh
dGZvcm1zLkFsbCBvciBtb2RlbF9wbGF0Zm9ybSBpcyBzZWxmLl9wbGF0Zm9ybQorCisgICAgZGVm
IHR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgcmV0
dXJuIFt0eXBlX2RlY2xhcmF0aW9uIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRvbWFpbi5hbGxf
dHlwZV9kZWNsYXJhdGlvbnMoKSBpZiBzZWxmLmNhbl9nZW5lcmF0ZV9wbGF0Zm9ybSh0eXBlX2Rl
Y2xhcmF0aW9uLnBsYXRmb3JtKV0KKworICAgIGRlZiBjb21tYW5kc19mb3JfZG9tYWluKHNlbGYs
IGRvbWFpbik6CisgICAgICAgIHJldHVybiBbY29tbWFuZCBmb3IgY29tbWFuZCBpbiBkb21haW4u
YWxsX2NvbW1hbmRzKCkgaWYgc2VsZi5jYW5fZ2VuZXJhdGVfcGxhdGZvcm0oY29tbWFuZC5wbGF0
Zm9ybSldCisKKyAgICBkZWYgZXZlbnRzX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAg
ICAgcmV0dXJuIFtldmVudCBmb3IgZXZlbnQgaW4gZG9tYWluLmFsbF9ldmVudHMoKSBpZiBzZWxm
LmNhbl9nZW5lcmF0ZV9wbGF0Zm9ybShldmVudC5wbGF0Zm9ybSldCisKICAgICAjIFRoZSBnb29m
eSBuYW1lIGlzIHRvIGRpc2FtYmlndWF0ZSBnZW5lcmF0b3Igc2V0dGluZ3MgZnJvbSBmcmFtZXdv
cmsgc2V0dGluZ3MuCiAgICAgZGVmIGdldF9nZW5lcmF0b3Jfc2V0dGluZyhzZWxmLCBrZXksIGRl
ZmF1bHQ9Tm9uZSk6CiAgICAgICAgIHJldHVybiBzZWxmLl9zZXR0aW5ncy5nZXQoa2V5LCBkZWZh
dWx0KQpAQCAtMTYxLDcgKzE3Nyw3IEBAIGNsYXNzIEdlbmVyYXRvcjoKIAogICAgICAgICBmb3Vu
ZF90eXBlcyA9IHNldCgpCiAgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKLSAgICAgICAg
ICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAg
ICAgICBmb3IgZGVjbGFyYXRpb24gaW4gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlu
KGRvbWFpbik6CiAgICAgICAgICAgICAgICAgaWYgZGVjbGFyYXRpb24udHlwZS5xdWFsaWZpZWRf
bmFtZSgpIGluIF9UWVBFU19ORUVESU5HX1JVTlRJTUVfQ0FTVFM6CiAgICAgICAgICAgICAgICAg
ICAgIGxvZy5kZWJ1ZygiPiBHYXRoZXJpbmcgdHlwZXMgcmVmZXJlbmNlZCBieSAlcyB0byBnZW5l
cmF0ZSBzaGFwZSBhc3NlcnRpb25zLiIgJSBkZWNsYXJhdGlvbi50eXBlLnF1YWxpZmllZF9uYW1l
KCkpCiAgICAgICAgICAgICAgICAgICAgIGdhdGhlcl90cmFuc2l0aXZlbHlfcmVmZXJlbmNlZF90
eXBlcyhkZWNsYXJhdGlvbi50eXBlLCBmb3VuZF90eXBlcykKQEAgLTE3NywxNyArMTkzLDE3IEBA
IGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgZG9tYWlucyA9IHNlbGYubm9uX3N1cHBsZW1lbnRh
bF9kb21haW5zKCkKIAogICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6Ci0gICAgICAgICAg
ICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6CisgICAg
ICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zv
cl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgICAgICBhbGxfdHlwZXMuYXBwZW5kKHR5cGVf
ZGVjbGFyYXRpb24udHlwZSkKICAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlw
ZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CiAgICAgICAgICAgICAgICAgICAgIGFsbF90eXBl
cy5hcHBlbmQodHlwZV9tZW1iZXIudHlwZSkKIAogICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFp
bnM6Ci0gICAgICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2ZW50czoKKyAgICAgICAgICAg
IGZvciBldmVudCBpbiBzZWxmLmV2ZW50c19mb3JfZG9tYWluKGRvbWFpbik6CiAgICAgICAgICAg
ICAgICAgYWxsX3R5cGVzLmV4dGVuZChbcGFyYW1ldGVyLnR5cGUgZm9yIHBhcmFtZXRlciBpbiBl
dmVudC5ldmVudF9wYXJhbWV0ZXJzXSkKIAogICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6
Ci0gICAgICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAgICAgICAg
ICBmb3IgY29tbWFuZCBpbiBzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKToKICAgICAg
ICAgICAgICAgICBhbGxfdHlwZXMuZXh0ZW5kKFtwYXJhbWV0ZXIudHlwZSBmb3IgcGFyYW1ldGVy
IGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzXSkKICAgICAgICAgICAgICAgICBhbGxfdHlwZXMu
ZXh0ZW5kKFtwYXJhbWV0ZXIudHlwZSBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3Bh
cmFtZXRlcnNdKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkKaW5kZXggNzE0NGE5ODMyNzhkNjEyYjk0MTU1
OTFkMTkwM2Q1YTM0ZWZjZTVjOC4uODEwZTA5NWJmOGQ5NzY0M2MwYjVjYzU5YmNlNzM3MGEyZDUz
NDkzZCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vbW9kZWxzLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weQpAQCAtMTA5LDYgKzEwOSwzNSBAQCBjbGFzcyBGcmFt
ZXdvcmtzOgogICAgIFRlc3QgPSBGcmFtZXdvcmsoIlRlc3QiKQogCiAKK2NsYXNzIFBsYXRmb3Jt
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFt
ZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBmcm9tU3RyaW5nKHBsYXRmb3JtU3RyaW5n
KToKKyAgICAgICAgcGxhdGZvcm1TdHJpbmcgPSBwbGF0Zm9ybVN0cmluZy5sb3dlcigpCisgICAg
ICAgIGlmIHBsYXRmb3JtU3RyaW5nID09ICJpb3MiOgorICAgICAgICAgICAgcmV0dXJuIFBsYXRm
b3Jtcy5pT1MKKworICAgICAgICBpZiBwbGF0Zm9ybVN0cmluZyA9PSAibWFjb3MiOgorICAgICAg
ICAgICAgcmV0dXJuIFBsYXRmb3Jtcy5tYWNPUworCisgICAgICAgIGlmIHBsYXRmb3JtU3RyaW5n
ID09ICJhbGwiOgorICAgICAgICAgICAgcmV0dXJuIFBsYXRmb3Jtcy5BbGwKKworICAgICAgICBp
ZiBwbGF0Zm9ybVN0cmluZyA9PSAiZ2VuZXJpYyIgb3Igbm90IHBsYXRmb3JtU3RyaW5nOgorICAg
ICAgICAgICAgcmV0dXJuIFBsYXRmb3Jtcy5HZW5lcmljCisKKyAgICAgICAgcmFpc2UgUGFyc2VF
eGNlcHRpb24oIlVua25vd24gcGxhdGZvcm06ICVzIiAlIHBsYXRmb3JtU3RyaW5nKQorCisKK2Ns
YXNzIFBsYXRmb3JtczoKKyAgICBBbGwgPSBQbGF0Zm9ybSgiQWxsIikKKyAgICBHZW5lcmljID0g
UGxhdGZvcm0oImdlbmVyaWMiKQorICAgIGlPUyA9IFBsYXRmb3JtKCJpT1MiKQorICAgIG1hY09T
ID0gUGxhdGZvcm0oIm1hY09TIikKKworCiBjbGFzcyBUeXBlUmVmZXJlbmNlOgogICAgIGRlZiBf
X2luaXRfXyhzZWxmLCB0eXBlX2tpbmQsIHJlZmVyZW5jZWRfdHlwZV9uYW1lLCBlbnVtX3ZhbHVl
cywgYXJyYXlfaXRlbXMpOgogICAgICAgICBzZWxmLnR5cGVfa2luZCA9IHR5cGVfa2luZApAQCAt
MzcxLDcgKzQwMCw4IEBAIGNsYXNzIFByb3RvY29sOgogICAgICAgICAgICAgcmFpc2UgUGFyc2VF
eGNlcHRpb24oIk1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdHlwZSBkZWNsYXJhdGlv
biBmb3IgJXMgaGFzIGR1cGxpY2F0ZSBtZW1iZXIgbmFtZXMiICUganNvblsnaWQnXSkKIAogICAg
ICAgICB0eXBlX3JlZiA9IFR5cGVSZWZlcmVuY2UoanNvblsndHlwZSddLCBqc29uLmdldCgnJHJl
ZicpLCBqc29uLmdldCgnZW51bScpLCBqc29uLmdldCgnaXRlbXMnKSkKLSAgICAgICAgcmV0dXJu
IFR5cGVEZWNsYXJhdGlvbihqc29uWydpZCddLCB0eXBlX3JlZiwganNvbi5nZXQoImRlc2NyaXB0
aW9uIiwgIiIpLCB0eXBlX21lbWJlcnMpCisgICAgICAgIHBsYXRmb3JtID0gUGxhdGZvcm0uZnJv
bVN0cmluZyhqc29uLmdldCgncGxhdGZvcm0nLCAnZ2VuZXJpYycpKQorICAgICAgICByZXR1cm4g
VHlwZURlY2xhcmF0aW9uKGpzb25bJ2lkJ10sIHR5cGVfcmVmLCBqc29uLmdldCgiZGVzY3JpcHRp
b24iLCAiIiksIHBsYXRmb3JtLCB0eXBlX21lbWJlcnMpCiAKICAgICBkZWYgcGFyc2VfdHlwZV9t
ZW1iZXIoc2VsZiwganNvbik6CiAgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVz
KFsnbmFtZSddLCBqc29uLCAidHlwZSBtZW1iZXIiKQpAQCAtNDA1LDcgKzQzNSw4IEBAIGNsYXNz
IFByb3RvY29sOgogICAgICAgICAgICAgaWYgbGVuKGR1cGxpY2F0ZV9uYW1lcykgPiAwOgogICAg
ICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgZG9tYWluIHNwZWNp
ZmljYXRpb246IHJldHVybiBwYXJhbWV0ZXIgbGlzdCBmb3IgY29tbWFuZCAlcyBoYXMgZHVwbGlj
YXRlIHBhcmFtZXRlciBuYW1lcyIgJSBqc29uWyduYW1lJ10pCiAKLSAgICAgICAgcmV0dXJuIENv
bW1hbmQoanNvblsnbmFtZSddLCBjYWxsX3BhcmFtZXRlcnMsIHJldHVybl9wYXJhbWV0ZXJzLCBq
c29uLmdldCgnZGVzY3JpcHRpb24nLCAiIiksIGpzb24uZ2V0KCdhc3luYycsIEZhbHNlKSkKKyAg
ICAgICAgcGxhdGZvcm0gPSBQbGF0Zm9ybS5mcm9tU3RyaW5nKGpzb24uZ2V0KCdwbGF0Zm9ybScs
ICdnZW5lcmljJykpCisgICAgICAgIHJldHVybiBDb21tYW5kKGpzb25bJ25hbWUnXSwgY2FsbF9w
YXJhbWV0ZXJzLCByZXR1cm5fcGFyYW1ldGVycywganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIp
LCBwbGF0Zm9ybSwganNvbi5nZXQoJ2FzeW5jJywgRmFsc2UpKQogCiAgICAgZGVmIHBhcnNlX2V2
ZW50KHNlbGYsIGpzb24pOgogICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhb
J25hbWUnXSwganNvbiwgImV2ZW50IikKQEAgLTQyMiw3ICs0NTMsOCBAQCBjbGFzcyBQcm90b2Nv
bDoKICAgICAgICAgICAgIGlmIGxlbihkdXBsaWNhdGVfbmFtZXMpID4gMDoKICAgICAgICAgICAg
ICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9u
OiBwYXJhbWV0ZXIgbGlzdCBmb3IgZXZlbnQgJXMgaGFzIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFt
ZXMiICUganNvblsnbmFtZSddKQogCi0gICAgICAgIHJldHVybiBFdmVudChqc29uWyduYW1lJ10s
IGV2ZW50X3BhcmFtZXRlcnMsIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICIiKSkKKyAgICAgICAg
cGxhdGZvcm0gPSBQbGF0Zm9ybS5mcm9tU3RyaW5nKGpzb24uZ2V0KCdwbGF0Zm9ybScsICdnZW5l
cmljJykpCisgICAgICAgIHJldHVybiBFdmVudChqc29uWyduYW1lJ10sIGV2ZW50X3BhcmFtZXRl
cnMsIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICIiKSwgcGxhdGZvcm0pCiAKICAgICBkZWYgcGFy
c2VfY2FsbF9vcl9yZXR1cm5fcGFyYW1ldGVyKHNlbGYsIGpzb24pOgogICAgICAgICBjaGVja19m
b3JfcmVxdWlyZWRfcHJvcGVydGllcyhbJ25hbWUnXSwganNvbiwgInBhcmFtZXRlciIpCkBAIC00
NDIsNyArNDc0LDcgQEAgY2xhc3MgUHJvdG9jb2w6CiAKICAgICAgICAgIyBHYXRoZXIgcXVhbGlm
aWVkIHR5cGUgbmFtZXMgZnJvbSB0eXBlIGRlY2xhcmF0aW9ucyBpbiBlYWNoIGRvbWFpbi4KICAg
ICAgICAgZm9yIGRvbWFpbiBpbiBzZWxmLmRvbWFpbnM6Ci0gICAgICAgICAgICBmb3IgZGVjbGFy
YXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAgZm9yIGRlY2xh
cmF0aW9uIGluIGRvbWFpbi5hbGxfdHlwZV9kZWNsYXJhdGlvbnMoKToKICAgICAgICAgICAgICAg
ICAjIEJhc2ljIHNhbml0eSBjaGVja2luZy4KICAgICAgICAgICAgICAgICBpZiBkZWNsYXJhdGlv
bi50eXBlX3JlZi5yZWZlcmVuY2VkX3R5cGVfbmFtZSBpcyBub3QgTm9uZToKICAgICAgICAgICAg
ICAgICAgICAgcmFpc2UgVHlwZWNoZWNrRXhjZXB0aW9uKCJUeXBlIGRlY2xhcmF0aW9ucyBtdXN0
IG5hbWUgYSBiYXNlIHR5cGUsIG5vdCBhIHR5cGUgcmVmZXJlbmNlLiIpCkBAIC01MjYsMjEgKzU1
OCwzMCBAQCBjbGFzcyBEb21haW46CiAgICAgICAgIHNlbGYuZmVhdHVyZV9ndWFyZCA9IGZlYXR1
cmVfZ3VhcmQKICAgICAgICAgc2VsZi5hdmFpbGFiaWxpdHkgPSBhdmFpbGFiaWxpdHkKICAgICAg
ICAgc2VsZi5pc19zdXBwbGVtZW50YWwgPSBpc1N1cHBsZW1lbnRhbAotICAgICAgICBzZWxmLnR5
cGVfZGVjbGFyYXRpb25zID0gdHlwZV9kZWNsYXJhdGlvbnMKLSAgICAgICAgc2VsZi5jb21tYW5k
cyA9IGNvbW1hbmRzCi0gICAgICAgIHNlbGYuZXZlbnRzID0gZXZlbnRzCisgICAgICAgIHNlbGYu
X3R5cGVfZGVjbGFyYXRpb25zID0gdHlwZV9kZWNsYXJhdGlvbnMKKyAgICAgICAgc2VsZi5fY29t
bWFuZHMgPSBjb21tYW5kcworICAgICAgICBzZWxmLl9ldmVudHMgPSBldmVudHMKKworICAgIGRl
ZiBhbGxfdHlwZV9kZWNsYXJhdGlvbnMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90eXBl
X2RlY2xhcmF0aW9ucworCisgICAgZGVmIGFsbF9jb21tYW5kcyhzZWxmKToKKyAgICAgICAgcmV0
dXJuIHNlbGYuX2NvbW1hbmRzCisKKyAgICBkZWYgYWxsX2V2ZW50cyhzZWxmKToKKyAgICAgICAg
cmV0dXJuIHNlbGYuX2V2ZW50cwogCiAgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNl
bGYsIHByb3RvY29sKToKICAgICAgICAgbG9nLmRlYnVnKCI+IFJlc29sdmluZyB0eXBlIGRlY2xh
cmF0aW9ucyBmb3IgZG9tYWluOiAlcyIgJSBzZWxmLmRvbWFpbl9uYW1lKQotICAgICAgICBmb3Ig
ZGVjbGFyYXRpb24gaW4gc2VsZi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgZm9yIGRlY2xh
cmF0aW9uIGluIHNlbGYuX3R5cGVfZGVjbGFyYXRpb25zOgogICAgICAgICAgICAgZGVjbGFyYXRp
b24ucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMocHJvdG9jb2wsIHNlbGYpCiAKICAgICAgICAgbG9n
LmRlYnVnKCI+IFJlc29sdmluZyB0eXBlcyBpbiBjb21tYW5kcyBmb3IgZG9tYWluOiAlcyIgJSBz
ZWxmLmRvbWFpbl9uYW1lKQotICAgICAgICBmb3IgY29tbWFuZCBpbiBzZWxmLmNvbW1hbmRzOgor
ICAgICAgICBmb3IgY29tbWFuZCBpbiBzZWxmLl9jb21tYW5kczoKICAgICAgICAgICAgIGNvbW1h
bmQucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMocHJvdG9jb2wsIHNlbGYpCiAKICAgICAgICAgbG9n
LmRlYnVnKCI+IFJlc29sdmluZyB0eXBlcyBpbiBldmVudHMgZm9yIGRvbWFpbjogJXMiICUgc2Vs
Zi5kb21haW5fbmFtZSkKLSAgICAgICAgZm9yIGV2ZW50IGluIHNlbGYuZXZlbnRzOgorICAgICAg
ICBmb3IgZXZlbnQgaW4gc2VsZi5fZXZlbnRzOgogICAgICAgICAgICAgZXZlbnQucmVzb2x2ZV90
eXBlX3JlZmVyZW5jZXMocHJvdG9jb2wsIHNlbGYpCiAKIApAQCAtNTQ5LDEwICs1OTAsMTEgQEAg
Y2xhc3MgRG9tYWluczoKIAogCiBjbGFzcyBUeXBlRGVjbGFyYXRpb246Ci0gICAgZGVmIF9faW5p
dF9fKHNlbGYsIHR5cGVfbmFtZSwgdHlwZV9yZWYsIGRlc2NyaXB0aW9uLCB0eXBlX21lbWJlcnMp
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlX25hbWUsIHR5cGVfcmVmLCBkZXNjcmlwdGlv
biwgcGxhdGZvcm0sIHR5cGVfbWVtYmVycyk6CiAgICAgICAgIHNlbGYudHlwZV9uYW1lID0gdHlw
ZV9uYW1lCiAgICAgICAgIHNlbGYudHlwZV9yZWYgPSB0eXBlX3JlZgogICAgICAgICBzZWxmLmRl
c2NyaXB0aW9uID0gZGVzY3JpcHRpb24KKyAgICAgICAgc2VsZi5wbGF0Zm9ybSA9IHBsYXRmb3Jt
CiAgICAgICAgIHNlbGYudHlwZV9tZW1iZXJzID0gdHlwZV9tZW1iZXJzCiAKICAgICAgICAgaWYg
c2VsZi50eXBlX25hbWUgIT0gdWNmaXJzdChzZWxmLnR5cGVfbmFtZSk6CkBAIC01OTYsMTEgKzYz
OCwxMiBAQCBjbGFzcyBQYXJhbWV0ZXI6CiAKIAogY2xhc3MgQ29tbWFuZDoKLSAgICBkZWYgX19p
bml0X18oc2VsZiwgY29tbWFuZF9uYW1lLCBjYWxsX3BhcmFtZXRlcnMsIHJldHVybl9wYXJhbWV0
ZXJzLCBkZXNjcmlwdGlvbiwgaXNfYXN5bmMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21t
YW5kX25hbWUsIGNhbGxfcGFyYW1ldGVycywgcmV0dXJuX3BhcmFtZXRlcnMsIGRlc2NyaXB0aW9u
LCBwbGF0Zm9ybSwgaXNfYXN5bmMpOgogICAgICAgICBzZWxmLmNvbW1hbmRfbmFtZSA9IGNvbW1h
bmRfbmFtZQogICAgICAgICBzZWxmLmNhbGxfcGFyYW1ldGVycyA9IGNhbGxfcGFyYW1ldGVycwog
ICAgICAgICBzZWxmLnJldHVybl9wYXJhbWV0ZXJzID0gcmV0dXJuX3BhcmFtZXRlcnMKICAgICAg
ICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCisgICAgICAgIHNlbGYucGxhdGZvcm0g
PSBwbGF0Zm9ybQogICAgICAgICBzZWxmLmlzX2FzeW5jID0gaXNfYXN5bmMKIAogICAgIGRlZiBy
ZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCwgZG9tYWluKToKQEAgLTYxNCwx
MCArNjU3LDExIEBAIGNsYXNzIENvbW1hbmQ6CiAKIAogY2xhc3MgRXZlbnQ6Ci0gICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGV2ZW50X25hbWUsIGV2ZW50X3BhcmFtZXRlcnMsIGRlc2NyaXB0aW9uKToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgZXZlbnRfbmFtZSwgZXZlbnRfcGFyYW1ldGVycywgZGVz
Y3JpcHRpb24sIHBsYXRmb3JtKToKICAgICAgICAgc2VsZi5ldmVudF9uYW1lID0gZXZlbnRfbmFt
ZQogICAgICAgICBzZWxmLmV2ZW50X3BhcmFtZXRlcnMgPSBldmVudF9wYXJhbWV0ZXJzCiAgICAg
ICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgorICAgICAgICBzZWxmLnBsYXRmb3Jt
ID0gcGxhdGZvcm0KIAogICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90
b2NvbCwgZG9tYWluKToKICAgICAgICAgbG9nLmRlYnVnKCI+PiBSZXNvbHZpbmcgdHlwZSByZWZl
cmVuY2VzIGZvciBwYXJhbWV0ZXJzIGluIGV2ZW50OiAlcyIgJSBzZWxmLmV2ZW50X25hbWUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9vYmpjX2dlbmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5CmluZGV4IGNhZDg3MmQxMDE3MWU2N2ZmOTcx
ODZkMGUyYTVlZWQ2MDJjYjAwY2UuLjJiZTg0NWU2YmVhODY0YWEwYjJhZjNjNGQ1ZGE3OTgzYTJh
MTMxNzIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5CkBAIC04OSw4ICs4OSw4
IEBAIGNsYXNzIE9iakNHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICBPQkpDX1NIQVJFRF9QUkVG
SVggPSAnUHJvdG9jb2wnCiAgICAgT0JKQ19TVEFUSUNfUFJFRklYID0gJyVzJXMnICUgKE9CSkNf
SEVMUEVSX1BSRUZJWCwgT0JKQ19TSEFSRURfUFJFRklYKQogCi0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhz
ZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdz
LCAqKmt3YXJncyk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCAqYXJncywgKipr
d2FyZ3MpCiAKICAgICAjIFRoZSAncHJvdG9jb2wgbmFtZScgaXMgdXNlZCB0byBwcmVmaXggZmls
ZW5hbWVzIGZvciBhIHByb3RvY29sIGdyb3VwIChhIHNldCBvZiBkb21haW5zIGdlbmVyYXRlZCB0
b2dldGhlcikuCiAgICAgZGVmIHByb3RvY29sX25hbWUoc2VsZik6CkBAIC0xMjAsMzQgKzEyMCwz
NyBAQCBjbGFzcyBPYmpDR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAKICAgICBET01BSU5TX1RPX0dF
TkVSQVRFID0gWydDU1MnLCAnRE9NJywgJ0RPTVN0b3JhZ2UnLCAnTmV0d29yaycsICdQYWdlJywg
J0F1dG9tYXRpb24nLCAnR2VuZXJpY1R5cGVzJ10KIAotICAgIEBzdGF0aWNtZXRob2QKLSAgICBk
ZWYgc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl90eXBlc19maWx0ZXIobW9kZWwpOgotICAgICAgICBk
ZWYgc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl90eXBlcyhkb21haW4pOgotICAgICAgICAgICAgaWYg
bW9kZWwuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuVGVzdDoKLSAgICAgICAgICAgICAgICByZXR1
cm4gVHJ1ZQotICAgICAgICAgICAgd2hpdGVsaXN0ID0gc2V0KE9iakNHZW5lcmF0b3IuRE9NQUlO
U19UT19HRU5FUkFURSkKLSAgICAgICAgICAgIHdoaXRlbGlzdC51cGRhdGUoc2V0KFsnQ29uc29s
ZScsICdEZWJ1Z2dlcicsICdSdW50aW1lJ10pKQotICAgICAgICAgICAgcmV0dXJuIGRvbWFpbi5k
b21haW5fbmFtZSBpbiB3aGl0ZWxpc3QKLSAgICAgICAgcmV0dXJuIHNob3VsZF9nZW5lcmF0ZV9k
b21haW5fdHlwZXMKKyAgICBkZWYgc2hvdWxkX2dlbmVyYXRlX3R5cGVzX2Zvcl9kb21haW4oc2Vs
ZiwgZG9tYWluKToKKyAgICAgICAgaWYgbm90IGxlbihzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zv
cl9kb21haW4oZG9tYWluKSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgIEBzdGF0
aWNtZXRob2QKLSAgICBkZWYgc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9jb21tYW5kX2hhbmRsZXJf
ZmlsdGVyKG1vZGVsKToKLSAgICAgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFu
ZF9oYW5kbGVyKGRvbWFpbik6Ci0gICAgICAgICAgICBpZiBtb2RlbC5mcmFtZXdvcmsgaXMgRnJh
bWV3b3Jrcy5UZXN0OgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgICAgICB3
aGl0ZWxpc3QgPSBzZXQoT2JqQ0dlbmVyYXRvci5ET01BSU5TX1RPX0dFTkVSQVRFKQotICAgICAg
ICAgICAgcmV0dXJuIGRvbWFpbi5kb21haW5fbmFtZSBpbiB3aGl0ZWxpc3QKLSAgICAgICAgcmV0
dXJuIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyCisgICAgICAgIGlmIHNl
bGYubW9kZWwoKS5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5UZXN0OgorICAgICAgICAgICAgcmV0
dXJuIFRydWUKIAotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgc2hvdWxkX2dlbmVyYXRlX2Rv
bWFpbl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRlcihtb2RlbCk6Ci0gICAgICAgIGRlZiBzaG91bGRf
Z2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXIoZG9tYWluKToKLSAgICAgICAgICAgIGlm
IG1vZGVsLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLlRlc3Q6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIFRydWUKLSAgICAgICAgICAgIHdoaXRlbGlzdCA9IHNldChPYmpDR2VuZXJhdG9yLkRPTUFJ
TlNfVE9fR0VORVJBVEUpCi0gICAgICAgICAgICB3aGl0ZWxpc3QuYWRkKCdDb25zb2xlJykKLSAg
ICAgICAgICAgIHJldHVybiBkb21haW4uZG9tYWluX25hbWUgaW4gd2hpdGVsaXN0Ci0gICAgICAg
IHJldHVybiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXIKKyAgICAgICAg
d2hpdGVsaXN0ID0gc2V0KE9iakNHZW5lcmF0b3IuRE9NQUlOU19UT19HRU5FUkFURSkKKyAgICAg
ICAgd2hpdGVsaXN0LnVwZGF0ZShzZXQoWydDb25zb2xlJywgJ0RlYnVnZ2VyJywgJ1J1bnRpbWUn
XSkpCisgICAgICAgIHJldHVybiBkb21haW4uZG9tYWluX25hbWUgaW4gd2hpdGVsaXN0CisKKyAg
ICBkZWYgc2hvdWxkX2dlbmVyYXRlX2NvbW1hbmRzX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToK
KyAgICAgICAgaWYgbm90IGxlbihzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKSk6Cisg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBzZWxmLm1vZGVsKCkuZnJhbWV3
b3JrIGlzIEZyYW1ld29ya3MuVGVzdDoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAg
ICAgd2hpdGVsaXN0ID0gc2V0KE9iakNHZW5lcmF0b3IuRE9NQUlOU19UT19HRU5FUkFURSkKKyAg
ICAgICAgcmV0dXJuIGRvbWFpbi5kb21haW5fbmFtZSBpbiB3aGl0ZWxpc3QKKworICAgIGRlZiBz
aG91bGRfZ2VuZXJhdGVfZXZlbnRzX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAg
aWYgbm90IGxlbihzZWxmLmV2ZW50c19mb3JfZG9tYWluKGRvbWFpbikpOgorICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgc2VsZi5tb2RlbCgpLmZyYW1ld29yayBpcyBGcmFt
ZXdvcmtzLlRlc3Q6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHdoaXRlbGlz
dCA9IHNldChPYmpDR2VuZXJhdG9yLkRPTUFJTlNfVE9fR0VORVJBVEUpCisgICAgICAgIHdoaXRl
bGlzdC5hZGQoJ0NvbnNvbGUnKQorICAgICAgICByZXR1cm4gZG9tYWluLmRvbWFpbl9uYW1lIGlu
IHdoaXRlbGlzdAogCiAgICAgIyBPYmpDIGVudW0gYW5kIHR5cGUgbmFtZXMuCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CmluZGV4
IDRhZjA3ODdkMDE3NWNkOTU2YWQzMTExZjRjMzAyMGZkNjg0MTc4M2IuLmVmOWM5ZDRlMzc2NGMz
Y2Q5ODM1MDg0YmMwM2I5MzM5N2RjMzZlZDcgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vz
ci9iaW4vZW52IHB5dGhvbgogIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTExNCw2
ICsxMTQsNyBAQCBkZWYgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lm
aWNhdGlvbl9maWxlcGF0aD1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwdXRfZGlycGF0aD1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jj
ZV9vdXRwdXQ9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1ld29y
a19uYW1lPSIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybV9uYW1l
PSIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZV9mcm9udGVuZD1U
cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZV9iYWNrZW5kPVRy
dWUpOgogCkBAIC0xMjUsNiArMTI2LDcgQEAgZGVmIGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlv
bihwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGg9Tm9uZSwKICAgICAgICAgZXhjZXB0IFZh
bHVlRXJyb3IgYXMgZToKICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRXJyb3IgcGFyc2lu
ZyB2YWxpZCBKU09OIGluIGZpbGU6ICIgKyBmaWxlcGF0aCArICJcblBhcnNlIGVycm9yOiAiICsg
c3RyKGUpKQogCisgICAgcGxhdGZvcm0gPSBQbGF0Zm9ybS5mcm9tU3RyaW5nKHBsYXRmb3JtX25h
bWUpCiAgICAgcHJvdG9jb2wgPSBtb2RlbHMuUHJvdG9jb2woZnJhbWV3b3JrX25hbWUpCiAgICAg
Zm9yIHNwZWNpZmljYXRpb24gaW4gc3VwcGxlbWVudGFsX3NwZWNpZmljYXRpb25fZmlsZXBhdGhz
OgogICAgICAgICBsb2FkX3NwZWNpZmljYXRpb24ocHJvdG9jb2wsIHNwZWNpZmljYXRpb24sIGlz
U3VwcGxlbWVudGFsPVRydWUpCkBAIC0xMzIsNTkgKzEzNCw2MSBAQCBkZWYgZ2VuZXJhdGVfZnJv
bV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aD1Ob25lLAogCiAg
ICAgcHJvdG9jb2wucmVzb2x2ZV90eXBlcygpCiAKKyAgICBnZW5lcmF0b3JfYXJndW1lbnRzID0g
W3Byb3RvY29sLCBwbGF0Zm9ybSwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoXQogICAg
IGdlbmVyYXRvcnMgPSBbXQorCiAgICAgaWYgcHJvdG9jb2wuZnJhbWV3b3JrIGlzIEZyYW1ld29y
a3MuVGVzdDoKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoSlNCYWNrZW5kQ29tbWFuZHNHZW5l
cmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAg
IGdlbmVyYXRvcnMuYXBwZW5kKENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAg
ICBnZW5lcmF0b3JzLmFwcGVuZChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihw
cm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJh
dG9ycy5hcHBlbmQoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihw
cm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJh
dG9ycy5hcHBlbmQoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKHByb3RvY29s
LCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFw
cGVuZChDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2Nv
bCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5h
cHBlbmQoQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9z
cGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwUHJv
dG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNp
ZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlv
bl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNCYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRp
b25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDQ29uZmlndXJhdGlv
bkhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRo
KSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRh
dGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkK
LSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgp
KQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDSGVhZGVyR2VuZXJhdG9yKHByb3RvY29s
LCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFw
cGVuZChPYmpDSW50ZXJuYWxIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lm
aWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNQcm90b2Nv
bFR5cGVDb252ZXJzaW9uc0hlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZp
Y2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ1Byb3RvY29s
VHlwZUNvbnZlcnNpb25zSW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlf
c3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNQ
cm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3Bl
Y2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEpTQmFja2Vu
ZENvbW1hbmRzR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJh
dG9ycy5hcHBlbmQoQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Io
KmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBCYWNr
ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAg
ICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVu
ZChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVu
dHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVy
YXRvcnMuYXBwZW5kKENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9h
cmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBQcm90b2NvbFR5cGVzSW1w
bGVtZW50YXRpb25HZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5l
cmF0b3JzLmFwcGVuZChPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoKmdlbmVy
YXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisg
ICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNDb25maWd1cmF0aW9uSGVhZGVyR2VuZXJhdG9y
KCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0Nv
bmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykp
CisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRv
cnMuYXBwZW5kKE9iakNIZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAg
ICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDSW50ZXJuYWxIZWFkZXJHZW5lcmF0b3IoKmdlbmVy
YXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDUHJvdG9jb2xU
eXBlQ29udmVyc2lvbnNIZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAg
ICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRv
cnMuYXBwZW5kKE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoKmdlbmVy
YXRvcl9hcmd1bWVudHMpKQogCiAgICAgZWxpZiBwcm90b2NvbC5mcmFtZXdvcmsgaXMgRnJhbWV3
b3Jrcy5KYXZhU2NyaXB0Q29yZToKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoSlNCYWNrZW5k
Q29tbWFuZHNHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0
aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVySGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBh
dGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAg
ICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAg
ICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJh
dG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBn
ZW5lcmF0b3JzLmFwcGVuZChDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAg
Z2VuZXJhdG9ycy5hcHBlbmQoQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihwcm90b2Nv
bCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5h
cHBlbmQoQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBw
cmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVu
ZChKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAg
ICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBl
bmQoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVu
dHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJh
dG9ycy5hcHBlbmQoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0
b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwRnJvbnRlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAg
ICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKCpn
ZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwUHJvdG9j
b2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKIAog
ICAgIGVsaWYgcHJvdG9jb2wuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuV2ViS2l0IGFuZCBnZW5l
cmF0ZV9iYWNrZW5kOgotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBCYWNrZW5kRGlzcGF0
Y2hlckhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVw
YXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVw
YXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdl
bmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAg
ICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJh
dG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBn
ZW5lcmF0b3JzLmFwcGVuZChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcigqZ2Vu
ZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcEJhY2tlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQor
ICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9y
KCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwUHJv
dG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkK
IAogICAgIGVsaWYgcHJvdG9jb2wuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuV2ViS2l0IGFuZCBn
ZW5lcmF0ZV9mcm9udGVuZDoKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0hlYWRlckdl
bmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAg
ICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSGVhZGVyR2Vu
ZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAg
ICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkK
LSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAg
ICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0hlYWRlckdlbmVyYXRvcigqZ2VuZXJhdG9yX2Fy
Z3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNQcm90b2NvbFR5cGVDb252
ZXJzaW9uc0hlYWRlckdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdl
bmVyYXRvcnMuYXBwZW5kKE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBl
bmQoT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcigqZ2VuZXJhdG9yX2Fy
Z3VtZW50cykpCiAKICAgICBlbGlmIHByb3RvY29sLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLldl
Ykluc3BlY3RvcjoKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0JhY2tlbmREaXNwYXRj
aGVySGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBh
dGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVw
YXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0NvbmZpZ3VyYXRpb25IZWFkZXJH
ZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAg
ICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5l
cmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAg
IGdlbmVyYXRvcnMuYXBwZW5kKE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAg
ICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0hlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFy
eV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2Jq
Q0ludGVybmFsSGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25f
ZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDUHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnNIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9m
aWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNQcm90b2NvbFR5cGVzSW1w
bGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxl
cGF0aCkpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMu
YXBwZW5kKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKCpnZW5l
cmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0NvbmZpZ3Vy
YXRpb25IZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5l
cmF0b3JzLmFwcGVuZChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yKCpn
ZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0Zyb250
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRz
KSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0hlYWRlckdlbmVyYXRvcigqZ2VuZXJh
dG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNJbnRlcm5hbEhl
YWRlckdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMu
YXBwZW5kKE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0hlYWRlckdlbmVyYXRvcigqZ2VuZXJh
dG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNQcm90b2NvbFR5
cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQogCiAgICAg
c2luZ2xlX291dHB1dF9maWxlX2NvbnRlbnRzID0gW10KIApAQCAtMjE2LDYgKzIyMCw3IEBAIGRl
ZiBnZW5lcmF0ZV9mcm9tX3NwZWNpZmljYXRpb24ocHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVw
YXRoPU5vbmUsCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgYWxsb3dlZF9mcmFt
ZXdvcmtfbmFtZXMgPSBbJ0phdmFTY3JpcHRDb3JlJywgJ1dlYkluc3BlY3RvcicsICdXZWJLaXQn
LCAnVGVzdCddCisgICAgYWxsb3dlZF9wbGF0Zm9ybV9uYW1lcyA9IFsnaU9TJywgJ21hY09TJywg
J2FsbCcsICdnZW5lcmljJ10KICAgICBjbGlfcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2Vy
KHVzYWdlPSJ1c2FnZTogJXByb2cgW29wdGlvbnNdIFByaW1hcnlQcm90b2NvbC5qc29uIFtTdXBw
bGVtZW50YWxQcm90b2NvbC5qc29uIC4uLl0iKQogICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigi
LW8iLCAiLS1vdXRwdXREaXIiLCBoZWxwPSJEaXJlY3Rvcnkgd2hlcmUgZ2VuZXJhdGVkIGZpbGVz
IHNob3VsZCBiZSB3cml0dGVuLiIpCiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLWZyYW1l
d29yayIsIHR5cGU9ImNob2ljZSIsIGNob2ljZXM9YWxsb3dlZF9mcmFtZXdvcmtfbmFtZXMsIGhl
bHA9IlRoZSBmcmFtZXdvcmsgdGhhdCB0aGUgcHJpbWFyeSBzcGVjaWZpY2F0aW9uIGJlbG9uZ3Mg
dG8uIikKQEAgLTIyNCw2ICsyMjksNyBAQCBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAg
IGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLXQiLCAiLS10ZXN0IiwgYWN0aW9uPSJzdG9yZV90cnVl
IiwgaGVscD0iRW5hYmxlIHRlc3QgbW9kZS4gVXNlIHVuaXF1ZSBvdXRwdXQgZmlsZW5hbWVzIGNy
ZWF0ZWQgYnkgcHJlcGVuZGluZyB0aGUgaW5wdXQgZmlsZW5hbWUuIikKICAgICBjbGlfcGFyc2Vy
LmFkZF9vcHRpb24oIi0tZnJvbnRlbmQiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJHZW5l
cmF0ZSBjb2RlIGZvciB0aGUgZnJvbnRlbmQtc2lkZSBvZiB0aGUgcHJvdG9jb2wgb25seS4iKQog
ICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLS1iYWNrZW5kIiwgYWN0aW9uPSJzdG9yZV90cnVl
IiwgaGVscD0iR2VuZXJhdGUgY29kZSBmb3IgdGhlIGJhY2tlbmQtc2lkZSBvZiB0aGUgcHJvdG9j
b2wgb25seS4iKQorICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLS1wbGF0Zm9ybSIsIGhlbHA9
IlRoZSBwbGF0Zm9ybSBvZiB0aGUgYmFja2VuZCBiZWluZyBnZW5lcmF0ZWQuIEZvciBleGFtcGxl
LCB3ZSBjb21waWxlIFdlYktpdDIgZm9yIGVpdGhlciBtYWNPUyBvciBpT1MuIFRoaXMgdmFsdWUg
aXMgY2FzZS1pbnNlbnNpdGl2ZS4gQWxsb3dlZCB2YWx1ZXM6ICVzIiAlICIsICIuam9pbihhbGxv
d2VkX3BsYXRmb3JtX25hbWVzKSkKICAgICBvcHRpb25zID0gTm9uZQogCiAgICAgYXJnX29wdGlv
bnMsIGFyZ192YWx1ZXMgPSBjbGlfcGFyc2VyLnBhcnNlX2FyZ3MoKQpAQCAtMjQ5LDYgKzI1NSw3
IEBAIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgICAgICdvdXRwdXRfZGlycGF0aCc6
IGFyZ19vcHRpb25zLm91dHB1dERpciwKICAgICAgICAgJ2NvbmNhdGVuYXRlX291dHB1dCc6IGFy
Z19vcHRpb25zLnRlc3QsCiAgICAgICAgICdmcmFtZXdvcmtfbmFtZSc6IGFyZ19vcHRpb25zLmZy
YW1ld29yaywKKyAgICAgICAgJ3BsYXRmb3JtX25hbWUnOiBhcmdfb3B0aW9ucy5wbGF0Zm9ybSwK
ICAgICAgICAgJ2ZvcmNlX291dHB1dCc6IGFyZ19vcHRpb25zLmZvcmNlLAogICAgICAgICAnZ2Vu
ZXJhdGVfYmFja2VuZCc6IGdlbmVyYXRlX2JhY2tlbmQsCiAgICAgICAgICdnZW5lcmF0ZV9mcm9u
dGVuZCc6IGdlbmVyYXRlX2Zyb250ZW5kLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2FsbC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxN2Yx
MzVlZTVhNzIwOTdhZTNlMTMxYmRkNDBlNjAxNjk4YWIxMGMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxsL2RlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KQEAgLTAsMCArMSwyOCBAQAoreworICAgICJkb21h
aW4iOiAiTmV0d29yayIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAi
aWQiOiAiTmV0d29ya0Vycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAg
ICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwg
ImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29k
ZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbW1hbmRzIjog
WworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UiLAorICAgICAg
ICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJM
b2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3Rl
ZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0KKyAgICBdLAor
ICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInJlc291cmNl
TG9hZGVkIiwKKyAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCisgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiQSByZXNvdXJjZSB3YXMgbG9hZGVkLiIKKyAgICAgICAgfQorICAgIF0K
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9hbGwvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1
bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxsL2V4
cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjZmMzQ4ZjJhOGE1Zjk5ZDU0YTBjNTI0NDU0NTZiNDlmNjc2N2I0NWMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxs
L2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CkBAIC0w
LDAgKzEsMTE3MiBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworLy8gTmV0d29yay4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJOZXR3b3JrRGlzcGF0Y2hl
ciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVj
dG9yQmFja2VuZCwgIk5ldHdvcmsiKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgi
TmV0d29yay5yZXNvdXJjZUxvYWRlZCIsIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJD
b21tYW5kKCJOZXR3b3JrLmxvYWRSZXNvdXJjZSIsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5k
LmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrIik7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tl
bmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAg
IHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRp
c3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0K
KyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJu
YXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElk
KSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorY2xhc3MgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNw
YXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorCitjbGFzcyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKEVycm9yU3RyaW5nJikgPSAwOworcHJvdGVjdGVk
OgorICAgIHZpcnR1YWwgfk5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisK
K2NsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrQmFj
a2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVy
cmlkZTsKK3ByaXZhdGU6CisgICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVE
aXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9
Citwcml2YXRlOgorICAgIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRl
cm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlmCitwcml2YXRlOgorICAgIE5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmtCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqKTsKKyAgICBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBt
X2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisj
aW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmCisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCitOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitSZWY8TmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyPiBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtCYWNrZW5kRGlz
cGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyOjpOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJh
Y2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
KyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQor
ICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3Rl
ckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrIiksIHRoaXMpOworfQor
Cit2b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCit7
CisgICAgUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9i
amVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRo
b2QgPT0gImxvYWRSZXNvdXJjZSIpCisgICAgICAgIGxvYWRSZXNvdXJjZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocGFyYW1ldGVycykpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
IG1ha2VTdHJpbmcoJ1wnJywgIk5ldHdvcmsiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3Vu
ZCIpKTsKK30KKwordm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNw
YXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlKHJl
cXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIEVycm9yU3Ry
aW5nIGVycm9yOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlKGVycm9yKTsKKworICAg
IGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSk7CisgICAgZWxzZQorICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIE5ldHdvcmtG
cm9udGVuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIE5ldHdvcmtGcm9udGVuZERpc3BhdGNo
ZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJv
bnRlbmRSb3V0ZXIpIHsgfQorICAgIHZvaWQgcmVzb3VyY2VMb2FkZWQoKTsKK3ByaXZhdGU6Cisg
ICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUg
Ikluc3BlY3RvckZyb250ZW5kUm91dGVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBOZXR3b3JrRnJvbnRlbmREaXNwYXRj
aGVyOjpyZXNvdXJjZUxvYWRlZCgpCit7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJOZXR3b3JrLnJlc291
cmNlTG9hZGVkIikpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMj
IyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisK
Ky8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIE5ldHdvcmsgeworY2xhc3MgTmV0
d29ya0Vycm9yOworfSAvLyBOZXR3b3JrCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMu
CisKKworCisKK25hbWVzcGFjZSBOZXR3b3JrIHsKK2NsYXNzIE5ldHdvcmtFcnJvciA6IHB1Ymxp
YyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0gewor
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisg
ICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdl
U2V0IHwgQ29kZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNs
YXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQor
CisgICAgICAgIEJ1aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9yKi9JbnNwZWN0b3JPYmplY3Q+JiYg
b2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVu
ZCBjbGFzcyBOZXR3b3JrRXJyb3I7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHBy
b3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVh
ZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgi
Y29kZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7
CisgICAgICAgIH0KKworICAgICAgICBSZWY8TmV0d29ya0Vycm9yPiByZWxlYXNlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihO
ZXR3b3JrRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisK
KyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVh
c2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2Fz
dDxSZWY8TmV0d29ya0Vycm9yPio+KCZyZXN1bHQpKTsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8TmV0d29ya0Vy
cm9yPiByZXN1bHQgPSBOZXR3b3JrRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRNZXNz
YWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgp
OworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gTmV0d29yaworCisKKworfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRo
LW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgewor
CisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhh
bmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBoYW5kbGVy
KSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZShsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxU
ZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3Zv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxv
bmcgcmVxdWVzdElkKQoreworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJv
cikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAg
IGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH07
CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazplcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMt
cGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1z
ZXROZXR3b3JrSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBu
ZXR3b3JrSGFuZGxlcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3Rv
Y29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqbmV0d29ya0V2ZW50RGlzcGF0Y2hlcjsK
K0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJs
ZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xOZXR3
b3JrRG9tYWluSGFuZGxlcj4gX25ldHdvcmtIYW5kbGVyOworICAgIFRlc3RQcm90b2NvbE5ldHdv
cmtEb21haW5FdmVudERpc3BhdGNoZXIgKl9uZXR3b3JrRXZlbnREaXNwYXRjaGVyOworfQorCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlm
ICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7Cisg
ICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2
b2lkKWRlYWxsb2MKK3sKKyAgICBbX25ldHdvcmtIYW5kbGVyIHJlbGVhc2VdOworICAgIFtfbmV0
d29ya0V2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisK
Ky0gKHZvaWQpc2V0TmV0d29ya0hhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5I
YW5kbGVyPiloYW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmtIYW5kbGVyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBbX25ldHdvcmtIYW5kbGVyIHJlbGVhc2VdOworICAgIF9u
ZXR3b3JrSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURp
c3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
ciwgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPj4oQVNDSUlMaXRlcmFsKCJOZXR3
b3JrIiksICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAg
X2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwor
fQorCistIChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4pbmV0d29ya0hhbmRs
ZXIKK3sKKyAgICByZXR1cm4gX25ldHdvcmtIYW5kbGVyOworfQorCistIChUZXN0UHJvdG9jb2xO
ZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyICopbmV0d29ya0V2ZW50RGlzcGF0Y2hlcgorewor
ICAgIGlmICghX25ldHdvcmtFdmVudERpc3BhdGNoZXIpCisgICAgICAgIF9uZXR3b3JrRXZlbnRE
aXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyIGFs
bG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfbmV0d29y
a0V2ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sTmV0d29ya0RvbWFp
bkV2ZW50RGlzcGF0Y2hlcgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciog
X2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKK3sKKyAgICBzZWxmID0g
W3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBB
U1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKXJlc291cmNlTG9hZGVkCit7CisgICAgY29uc3QgRnJv
bnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisg
ICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2Qi
KSwgQVNDSUlMaXRlcmFsKCJOZXR3b3JrLnJlc291cmNlTG9hZGVkIikpOworICAgIHJvdXRlci5z
ZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworQGVuZAorCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgor
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNs
YXNzIFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvcjsKKworCisKKworX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmtFcnJv
ciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9h
ZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0
OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNv
ZGU6KGludCljb2RlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkp
IE5TU3RyaW5nICptZXNzYWdlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IGFzc2lnbikgaW50IGNvZGU7CitAZW5kCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3Jr
RG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAcmVxdWlyZWQKKy0gKHZvaWQpbG9hZFJlc291cmNl
V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNr
IHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSgpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKworX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90
b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAorLSAodm9pZClyZXNv
dXJjZUxvYWRlZDsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCitAaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZhdGUpCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciopY29udHJvbGxlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09iakNFbnVtVHlwZSBmcm9tUHJvdG9j
b2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zIChOZXR3b3JrRG9tYWluKQorCisrICh2b2lkKV9wYXJzZU5ldHdvcmtFcnJv
cjooVGVzdFByb3RvY29sTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMgKE5ldHdvcmtEb21haW4pCisKKysgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0
UHJvdG9jb2xOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
K3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25h
cnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmtFcnJvciBh
bGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4K
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorI2ltcG9ydCA8d3Rm
L0Fzc2VydGlvbnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCitAaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sTmV0d29ya0Vycm9yCisKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxv
YWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtA
Im1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7CisgICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1l
c3NhZ2UiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5
bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7CisgICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2Rl
Il0gaW50ZWdlclZhbHVlXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdAor
eworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W2pzb25P
YmplY3QgdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZToo
TlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlCit7CisgICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOworCisgICAgc2VsZi5t
ZXNzYWdlID0gbWVzc2FnZTsKKyAgICBzZWxmLmNvZGUgPSBjb2RlOworCisgICAgcmV0dXJuIHNl
bGY7Cit9CisKKy0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCit7CisgICAg
W3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAoTlNT
dHJpbmcgKiltZXNzYWdlCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNz
YWdlIl07Cit9CisKKy0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKK3sKKyAgICBbc3VwZXIgc2V0
SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUiXTsKK30KKworLSAoaW50KWNvZGUKK3sKKyAgICBy
ZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Cit9CisKK0BlbmQKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRy
aWJ1dGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxMTI2MmU4ODlmYTViZDBiNGFlNTdlNWY3ZjFiYWM2Y2ZmM2ZlOTM5Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLXsKLSAgICAiZG9tYWlu
IjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJp
ZCI6ICJEYXRhYmFzZUlkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAotICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVj
dC4iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29s
b3JzIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZW51bSI6
IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAg
ICAgICAiaWQiOiAiQ29sb3JMaXN0IiwKLSAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAg
ICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfQotICAgICAgICB9
LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAotICAgICAgICAgICAgInR5
cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJv
ci4iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1l
c3NhZ2UuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImlu
dGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KLSAgICAgICAgICAgIF0KLSAg
ICAgICAgfQotICAgIF0sCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAg
ICAibmFtZSI6ICJleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwKLSAgICAgICAg
ICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJ
ZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJx
dWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJy
ZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlw
ZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5n
IiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmlu
ZyIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVz
dGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRy
dWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnki
LCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFz
ZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwi
OiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVm
IjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9u
YWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5
cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxh
Y2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAg
ICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzIiwKLSAgICAgICAgICAgICJhc3luYyI6IHRydWUsCi0gICAgICAgICAgICAicGFyYW1l
dGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6
ICJEYXRhYmFzZUlkIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlw
ZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0dXJucyI6IFsK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXki
LCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9u
YWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlw
ZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFs
IjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVm
IjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5
Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
YWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmlu
ZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRp
b25hbCI6IHRydWUgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAg
ICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMU3luYyIsCi0gICAgICAgICAgICAicGFyYW1ldGVy
cyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJE
YXRhYmFzZUlkIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6
ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAi
aXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29s
b3JzIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjog
InN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0g
fQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFt
ZSI6ICJleGVjdXRlU1FMQXN5bmMiLAotICAgICAgICAgICAgImFzeW5jIjogdHJ1ZSwKLSAgICAg
ICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJh
c2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAg
ICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAi
dHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0s
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1h
cnlDb2xvcnMiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMi
LCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmlu
dENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5
ZWxsb3ciLCAiYmxhY2siXSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Y29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1v
cHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDM2MWQ1N2Q4MjBkZTkxNmE3M2NiZGQ5ODM4M2QxMjY0MjAzOThmNGEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2Fs
bC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAot
ewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewot
ICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAotICAgICAgICAgICAgInR5cGUiOiAiaW50
ZWdlciIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2Yg
RGF0YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlk
IjogIlByaW1hcnlDb2xvcnMiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAg
ICAgICAgICJlbnVtIjogWyJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdCi0gICAgICAgIH0sCi0gICAg
ICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJDb2xvckxpc3QiLAotICAgICAgICAgICAgInR5cGUi
OiAiYXJyYXkiLAotICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJQcmltYXJ5Q29sb3Jz
IiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCi0g
ICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkRhdGFiYXNlIGVycm9yLiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRp
b24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2Rl
IiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQotICAg
ICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXSwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiLAot
ICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJj
b2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjog
eyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVz
IiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9h
ZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJF
cnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNj
cmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNv
bG9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRh
IiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KLSAgICAgICAgICAgIF0s
Ci0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNv
bHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7
ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMi
LCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3Qi
LCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2Fk
IiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVy
cm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2Ny
ZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29s
b3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEi
LCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQotICAgICAgICAgICAgXQot
ICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjog
eyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVz
IiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0
YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFs
dWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5
bG9hZCIsICJ0eXBlIjogImFueSIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFi
YXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmci
LCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KLSAgICAg
ICAgICAgIF0sCi0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjog
InN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6
ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlw
ZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlw
ZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5
cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIk
cmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJv
ciIsICIkcmVmIjogIkVycm9yIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVu
Q29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjog
WyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQotICAgICAgICAgICAgXQot
ICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21h
aW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDk0YThlY2IxNzZkM2I4ZWM5YmY5NjY3NmU2M2NlYTA1MTQ2NmI4NjguLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLVsKLXsKLSAgICAi
ZG9tYWluIjogIk5ldHdvcmsxIiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTEiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5z
cGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQotICAg
IF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJOZXR3b3JrMiIsCi0gICAgInR5cGVzIjogWwotICAg
ICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiTG9hZGVySWQiLAotICAgICAgICAgICAgInR5cGUi
OiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgbG9hZGVyIGlk
ZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAgXQotfSwKLXsKLSAgICAiZG9tYWluIjogIk5ldHdv
cmszIiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjog
ImxvYWRSZXNvdXJjZTEiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVz
b3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0
aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAg
ICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMiIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNw
ZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9LAotICAg
ICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UzIiwKLSAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJh
bWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0g
ICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTQi
LAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNv
bnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmln
aW4gY2hlY2tzLiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAi
bG9hZFJlc291cmNlNSIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNv
dXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRo
b3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAg
ICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U2IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3Bl
Y3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0sCi0gICAg
ICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTciLAotICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFt
ZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAg
ICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9lbnVtLXZhbHVlcy5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb24KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYWQ2MWRmN2M5ZjljNzZlNjkyODk3YzNkZmUwYjA4MjNm
OTBlNGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpz
b24KKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi17ImRvbWFpbnMiOlsKLXsKLSAgICAi
ZG9tYWluIjogIlR5cGVEb21haW4iLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAg
ICAgICAgImlkIjogIlR5cGVEb21haW5FbnVtIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmlu
ZyIsCi0gICAgICAgICAgICAiZW51bSI6IFsic2hhcmVkIiwgInJlZCIsICJncmVlbiIsICJibHVl
Il0KLSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJDb21tYW5kRG9tYWlu
IiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImNv
bW1hbmRXaXRoRW51bVJldHVyblZhbHVlIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogW10s
Ci0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJl
dHVyblZhbHVlIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJjeWFuIiwg
Im1hZ2VudGEiLCAieWVsbG93Il0gfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQot
fSwKLXsKLSAgICAiZG9tYWluIjogIkV2ZW50RG9tYWluIiwKLSAgICAiZXZlbnRzIjogWwotICAg
ICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJldmVudFdpdGhFbnVtUGFyYW1ldGVyIiwKLSAg
ICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGFy
YW1ldGVyIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJibGFjayIsICJ3
aGl0ZSJdIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KLV19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZlbnRz
LXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNv
bgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FiYmYxMGI4MzZmOWZmN2NkOTkyNWRi
NGQ2YjQxYzVkZmE4N2I0OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZl
bnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNTkg
KzAsMCBAQAotewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJ0eXBlcyI6IFsKLSAg
ICAgICAgewotICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAotICAgICAgICAgICAgInR5
cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRp
ZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAg
ICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmci
LAotICAgICAgICAgICAgInZhbHVlcyI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQotICAgICAg
ICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQ29sb3JMaXN0IiwKLSAgICAgICAg
ICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiUHJp
bWFyeUNvbG9ycyIgfQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAi
RXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwg
ImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29k
ZS4iIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0sCi0gICAgImV2ZW50cyI6IFsK
LSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1l
dGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAi
aXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9u
YWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6
ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6
IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYi
OiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIsICJvcHRpb25h
bCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlw
ZSI6ICJzdHJpbmciLCAidmFsdWVzIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJs
YWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAg
ICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJz
dHJpbmciIH0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAi
c3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUi
OiAibnVtYmVyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUi
OiAib2JqZWN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBl
IjogImFueSIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYi
OiAiRXJyb3IiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIk
cmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRl
cm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgInZhbHVlcyI6IFsiY3lhbiIs
ICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAg
fQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29u
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ1YzQ0YzViOTBlMDU0MWRlNjEyYzMxZWY0YTQyZWY4
Njg1ZWM0NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29t
bWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAt
MSwxNzU0ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5j
LWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLS8vIERhdGFiYXNlLgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRhdGFiYXNlRGlzcGF0
Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5z
cGVjdG9yQmFja2VuZCwgIkRhdGFiYXNlIik7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51
bSgiRGF0YWJhc2UuUHJpbWFyeUNvbG9ycyIsIHtSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwg
Qmx1ZTogImJsdWUifSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJh
c2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsIFt7Im5hbWUiOiAiZGF0YWJh
c2VJZCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInF1
ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogZmFsc2V9XSwgWyJjb2x1bW5OYW1l
cyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJ
ZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRD
b2xvciJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIs
ICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInF1ZXJ5Iiwg
InR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogZmFsc2V9XSwgWyJjb2x1bW5OYW1lcyIsICJu
b3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJz
cWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJd
KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FM
U3luYyIsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25h
bCI6IGZhbHNlfSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFs
IjogZmFsc2V9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVz
IiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJhbHRlcm5hdGVDb2xvcnMi
LCAic2NyZWVuQ29sb3IiLCAicHJpbnRDb2xvciJdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMiLCBbeyJuYW1lIjogImRhdGFiYXNl
SWQiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJxdWVy
eSIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNlfV0sIFsiY29sdW1uTmFtZXMi
LCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQi
LCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29s
b3IiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIpOwotIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0
cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIg
PSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmRE
aXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQot
cHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNo
ZXI7Ci19OwotCi0KLWNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgOiBw
dWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwg
fkFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGludCBp
bl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMo
bG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9
IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdp
dGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LQotY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAg
IC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncHJpbnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBj
b21tYW5kL2V2ZW50IGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMuCi0gICAgZW51
bSBjbGFzcyBQcmludENvbG9yIHsKLSAgICAgICAgQ3lhbiA9IDMsCi0gICAgICAgIE1hZ2VudGEg
PSA0LAotICAgICAgICBZZWxsb3cgPSA1LAotICAgICAgICBCbGFjayA9IDYsCi0gICAgfTsgLy8g
ZW51bSBjbGFzcyBQcmludENvbG9yCi0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmlu
Zz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8
U3RyaW5nPiogb3B0X291dF9ub3RlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRv
dWJsZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvcHRfb3V0X3ZhbHVlcywgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBvcHRfb3V0X3Bh
eWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBvcHRfb3V0X2RhdGFi
YXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRf
b3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cyogb3B0X291dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikgPSAwOwot
ICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sgOiBw
dWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7Ci0gICAgcHVibGljOgotICAg
ICAgICBFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJlZjxCYWNr
ZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIG5vdGVzLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiogdGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiB2YWx1ZXMsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiogcGF5bG9h
ZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIGRhdGFiYXNlSWQsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBzY3JlZW5Db2xvciwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3Jz
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogcHJpbnRDb2xvcik7Ci0g
ICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVy
eSwgUmVmPEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+JiYgY2Fs
bGJhY2spID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMoRXJyb3JTdHJpbmcm
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyog
b3V0X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0KiBvdXRfdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBvdXRfcGF5bG9hZCwg
aW50KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4mIG91dF9zcWxFcnJvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpDb2xvckxpc3Q+JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKLSAg
ICBjbGFzcyBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayA6IHB1YmxpYyBCYWNrZW5kRGlzcGF0Y2hl
cjo6Q2FsbGJhY2tCYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEV4ZWN1dGVTUUxBc3luY0Nh
bGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKLSAgICAgICAgdm9pZCBz
ZW5kU3VjY2VzcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mJiBj
b2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3QgdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIHBh
eWxvYWQsIGludCBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiYmIHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xv
cnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcik7Ci0gICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZVNRTEFzeW5jKEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYgaW5fcXVlcnksIFJlZjxFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4mJiBjYWxsYmFjaykg
PSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKCk7Ci19OwotCi1jbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDog
cHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hl
ciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmpl
Y3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7Ci1wcml2YXRlOgotICAgIHZvaWQgZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFt
ZXRlcnMpOwotICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBleGVjdXRlU1FMQXN5bmMo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAg
dm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0
ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYK
LXByaXZhdGU6Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hl
ciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLURhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIo
KSB7IH0KLQotUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBh
Z2VudCkpOwotfQotCi1EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2Vu
ZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewot
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJ
SUxpdGVyYWwoIkRhdGFiYXNlIiksIHRoaXMpOwotfQotCi12b2lkIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFy
YW1zIiksIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyIpCi0gICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNlIGlmICht
ZXRob2QgPT0gImV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikKLSAgICAgICAg
ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpKTsKLSAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jIikKLSAg
ICAgICAgZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAg
ICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxBc3luYyIpCi0gICAgICAgIGV4ZWN1dGVT
UUxBc3luYyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIkRhdGFiYXNlIiwgJy4nLCBt
ZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKQotewotICAgIGludCBpbl9k
YXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdl
dCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGlu
X3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCks
IEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0cik7Ci0gICAgaWYgKG1fYmFja2VuZERpc3Bh
dGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywg
U3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHBy
b2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKLSAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiBvdXRfbm90ZXM7Ci0gICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsKLSAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IG91dF92YWx1ZXM7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWU+IG91dF9wYXlsb2FkOwotICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RGF0YWJhc2VJZD4g
b3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4gb3V0X3NxbEVycm9yOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xv
cjsKLSAgICBtX2FnZW50LT5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGVycm9y
LCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAm
b3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQs
IG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5Db2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgJm91
dF9wcmludENvbG9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgaWYg
KG91dF9jb2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoQVNDSUlMaXRl
cmFsKCJjb2x1bW5OYW1lcyIpLCBvdXRfY29sdW1uTmFtZXMpOwotICAgICAgICBpZiAob3V0X25v
dGVzLmlzQXNzaWduZWQoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgibm90ZXMiKSwgb3V0X25vdGVzLmdldFZhbHVlKCkpOwotICAgICAgICBpZiAob3V0X3Rp
bWVzdGFtcC5pc0Fzc2lnbmVkKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldERvdWJsZShBU0NJ
SUxpdGVyYWwoInRpbWVzdGFtcCIpLCBvdXRfdGltZXN0YW1wLmdldFZhbHVlKCkpOwotICAgICAg
ICBpZiAob3V0X3ZhbHVlcy5pc0Fzc2lnbmVkKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldE9i
amVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBvdXRfdmFsdWVzLmdldFZhbHVlKCkpOwotICAg
ICAgICBpZiAob3V0X3BheWxvYWQuaXNBc3NpZ25lZCgpKQotICAgICAgICAgICAgcmVzdWx0LT5z
ZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgb3V0X3BheWxvYWQuZ2V0VmFsdWUoKSk7
Ci0gICAgICAgIGlmIChvdXRfZGF0YWJhc2VJZC5pc0Fzc2lnbmVkKCkpCi0gICAgICAgICAgICBy
ZXN1bHQtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG91dF9kYXRhYmFz
ZUlkLmdldFZhbHVlKCkpOwotICAgICAgICBpZiAob3V0X3NxbEVycm9yKQotICAgICAgICAgICAg
cmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBvdXRfc3FsRXJyb3Ip
OwotICAgICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmlzQXNzaWduZWQoKSkKLSAgICAgICAgICAg
IHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgb3V0X3NjcmVl
bkNvbG9yLmdldFZhbHVlKCkpOwotICAgICAgICBpZiAob3V0X2FsdGVybmF0ZUNvbG9ycykKLSAg
ICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMi
KSwgb3V0X2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5pc0Fz
c2lnbmVkKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInBy
aW50Q29sb3IiKSwgb3V0X3ByaW50Q29sb3IuZ2V0VmFsdWUoKSk7Ci0gICAgfQotICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi1EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6RXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhSZWY8QmFja2VuZERpc3Bh
dGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBCYWNrZW5kRGlzcGF0Y2hlcjo6
Q2FsbGJhY2tCYXNlKFdURk1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9Ci0KLXZvaWQg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpP
cHRPdXRwdXQ8U3RyaW5nPiogbm90ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxk
b3VibGU+KiB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4qIHZhbHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0
cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBwYXlsb2FkLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8aW50PiogZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0
T3V0cHV0PFN0cmluZz4qIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKQotewotICAgIFJlZjxJbnNwZWN0b3JP
YmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBpZiAo
Y29sdW1uTmFtZXMpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheShBU0NJSUxpdGVyYWwo
ImNvbHVtbk5hbWVzIiksIGNvbHVtbk5hbWVzKTsKLSAgICBpZiAobm90ZXMuaXNBc3NpZ25lZCgp
KQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwg
bm90ZXMuZ2V0VmFsdWUoKSk7Ci0gICAgaWYgKHRpbWVzdGFtcC5pc0Fzc2lnbmVkKCkpCi0gICAg
ICAgIGpzb25NZXNzYWdlLT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdGlt
ZXN0YW1wLmdldFZhbHVlKCkpOwotICAgIGlmICh2YWx1ZXMuaXNBc3NpZ25lZCgpKQotICAgICAg
ICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZhbHVlcy5n
ZXRWYWx1ZSgpKTsKLSAgICBpZiAocGF5bG9hZC5pc0Fzc2lnbmVkKCkpCi0gICAgICAgIGpzb25N
ZXNzYWdlLT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgcGF5bG9hZC5nZXRWYWx1
ZSgpKTsKLSAgICBpZiAoZGF0YWJhc2VJZC5pc0Fzc2lnbmVkKCkpCi0gICAgICAgIGpzb25NZXNz
YWdlLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBkYXRhYmFzZUlkLmdl
dFZhbHVlKCkpOwotICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldE9i
amVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIHNxbEVycm9yKTsKLSAgICBpZiAoc2NyZWVu
Q29sb3IuaXNBc3NpZ25lZCgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgc2NyZWVuQ29sb3IuZ2V0VmFsdWUoKSk7Ci0gICAgaWYg
KGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KEFTQ0lJTGl0
ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIGFsdGVybmF0ZUNvbG9ycyk7Ci0gICAgaWYgKHByaW50
Q29sb3IuaXNBc3NpZ25lZCgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgicHJpbnRDb2xvciIpLCBwcmludENvbG9yLmdldFZhbHVlKCkpOwotICAgIENhbGxi
YWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOwotfQotCi12b2lkIERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMp
Ci17Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRl
Z2VyKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRy
KTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmco
cGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyKTsKLSAgICBp
ZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpJbnZhbGlkUGFyYW1zLCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9k
ICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJv
cjsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJl
ZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigp
LCByZXF1ZXN0SWQpKTsKLSAgICBtX2FnZW50LT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlcyhlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrLmNvcHlSZWYo
KSk7Ci0KLSAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgY2FsbGJhY2stPmRpc2Fi
bGUoKTsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3lu
Yyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKQot
ewotICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdl
cihwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0cik7
Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBh
cmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0cik7Ci0gICAgaWYg
KG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
SW52YWxpZFBhcmFtcywgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAn
JXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMU3luYyIpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luYyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNl
SWQsIGluX3F1ZXJ5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJy
b3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOwotICAgIFN0cmluZyBvdXRfbm90ZXM7Ci0gICAg
ZG91YmxlIG91dF90aW1lc3RhbXA7Ci0gICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Qgb3V0
X3ZhbHVlczsKLSAgICBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIG91dF9wYXlsb2FkOwotICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpEYXRhYmFzZUlkIG91dF9kYXRhYmFzZUlk
OwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9z
cWxFcnJvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9y
TGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Ci0gICAgbV9hZ2Vu
dC0+ZXhlY3V0ZVNRTFN5bmMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRfY29s
dW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3Bh
eWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCBvdXRfYWx0ZXJuYXRlQ29sb3Jz
LCAmb3V0X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOwotCi0gICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkgewotICAgICAgICByZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1u
TmFtZXMiKSwgb3V0X2NvbHVtbk5hbWVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJub3RlcyIpLCBvdXRfbm90ZXMpOwotICAgICAgICByZXN1bHQtPnNldERvdWJs
ZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCBvdXRfdGltZXN0YW1wKTsKLSAgICAgICAgcmVz
dWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgb3V0X3ZhbHVlcyk7Ci0gICAg
ICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIG91dF9wYXlsb2Fk
KTsKLSAgICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIp
LCBvdXRfZGF0YWJhc2VJZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgic3FsRXJyb3IiKSwgb3V0X3NxbEVycm9yKTsKLSAgICAgICAgcmVzdWx0LT5zZXRBcnJheShB
U0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBvdXRfYWx0ZXJuYXRlQ29sb3JzKTsKLSAg
ICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3Nj
cmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJp
bnRDb2xvciIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0
YW50VmFsdWUob3V0X3ByaW50Q29sb3IpKTsKLSAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
V1RGTW92ZShyZXN1bHQpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZN
b3ZlKGVycm9yKSk7Ci19Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVj
dXRlU1FMQXN5bmNDYWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2soUmVmPEJhY2tlbmRE
aXNwYXRjaGVyPiYmIGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2VuZERpc3BhdGNo
ZXI6OkNhbGxiYWNrQmFzZShXVEZNb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQpIHsgfQotCi12
b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxs
YmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmlu
Zz4+JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAs
IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IHZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJu
YXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpCi17Ci0gICAgUmVmPEluc3BlY3Rv
ck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpz
b25NZXNzYWdlLT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGNvbHVtbk5h
bWVzKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwg
bm90ZXMpOwotICAgIGpzb25NZXNzYWdlLT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3Rh
bXAiKSwgdGltZXN0YW1wKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgidmFsdWVzIiksIHZhbHVlcyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKEFTQ0lJTGl0
ZXJhbCgicGF5bG9hZCIpLCBwYXlsb2FkKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0SW50ZWdlcihB
U0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgZGF0YWJhc2VJZCk7Ci0gICAganNvbk1lc3NhZ2Ut
PnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIHNxbEVycm9yKTsKLSAgICBqc29u
TWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHNjcmVlbkNvbG9y
KSk7Ci0gICAganNvbk1lc3NhZ2UtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29s
b3JzIiksIGFsdGVybmF0ZUNvbG9ycyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoInByaW50Q29sb3IiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6
OmdldEVudW1Db25zdGFudFZhbHVlKHByaW50Q29sb3IpKTsKLSAgICBDYWxsYmFja0Jhc2U6OnNl
bmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2UpKTsKLX0KLQotdm9pZCBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycykKLXsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRl
cmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9IG1fYmFj
a2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwo
InF1ZXJ5IiksIG51bGxwdHIpOwotICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90
b2NvbEVycm9ycygpKSB7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIFN0cmluZzo6Zm9ybWF0
KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0
YWJhc2UuZXhlY3V0ZVNRTEFzeW5jIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVT
UUxBc3luYyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBS
ZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxi
YWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJl
ZigpLCByZXF1ZXN0SWQpKTsKLSAgICBtX2FnZW50LT5leGVjdXRlU1FMQXN5bmMoZXJyb3IsIGlu
X2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBjYWxsYmFjay5jb3B5UmVmKCkpOwotCi0gICAgaWYgKGVy
cm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIGNhbGxiYWNrLT5kaXNhYmxlKCk7Ci0gICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0
cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgi
Ci0KLSNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3Bh
Y2UgUHJvdG9jb2wgewotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBEYXRh
YmFzZSB7Ci1jbGFzcyBFcnJvcjsKLWVudW0gY2xhc3MgUHJpbWFyeUNvbG9yczsKLX0gLy8gRGF0
YWJhc2UKLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0vLyBUeXBlZGVmcy4K
LW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci0vKiBVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBv
YmplY3QuICovCi10eXBlZGVmIGludCBEYXRhYmFzZUlkOwotdHlwZWRlZiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cz4gQ29sb3JMaXN0OwotfSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi1uYW1l
c3BhY2UgVGVzdEhlbHBlcnMgewotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNv
ZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUo
VCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19j
YXN0PGludD4oZW51bVZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0K
LW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci0vKiAgKi8KLWVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycyB7
Ci0gICAgUmVkID0gMCwKLSAgICBHcmVlbiA9IDEsCi0gICAgQmx1ZSA9IDIsCi19OyAvLyBlbnVt
IGNsYXNzIFByaW1hcnlDb2xvcnMKLS8qIERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3MgRXJyb3Ig
OiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBl
bnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBNZXNzYWdlU2V0ID0gMSA8
PCAwLAotICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAo
TWVzc2FnZVNldCB8IENvZGVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4K
LSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRl
cjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9JbnNwZWN0b3JPYmplY3Q+JiYg
b2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVu
ZCBjbGFzcyBFcnJvcjsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1l
c3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlf
bWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFT
Q0lJTGl0ZXJhbCgibWVzc2FnZSIpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPE1lc3NhZ2VTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
Q29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQp
OwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJjb2RlIiks
IHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVv
ZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJnJlc3Vs
dCkpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgotICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCi0gICAg
ICogICAgIC5zZXRNZXNzYWdlKC4uLikKLSAgICAgKiAgICAgLnNldENvZGUoLi4uKQotICAgICAq
ICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLX0gLy8gRGF0YWJhc2UKLQot
Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29s
RW51bVR5cGU+Ci1zdGQ6Om9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQotLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScg
RG9tYWluCi10ZW1wbGF0ZTw+Ci1zdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYpOwotCi19
IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLW5hbWVzcGFjZSBUZXN0
SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVl
c1tdID0gewotICAgICJyZWQiLAotICAgICJncmVlbiIsCi0gICAgImJsdWUiLAotICAgICJjeWFu
IiwKLSAgICAibWFnZW50YSIsCi0gICAgInllbGxvdyIsCi0gICAgImJsYWNrIiwKLX07Ci0KLVN0
cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewotICAgIHJldHVybiBlbnVtX2Nv
bnN0YW50X3ZhbHVlc1tjb2RlXTsKLX0KLQotLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9t
YWluCi10ZW1wbGF0ZTw+Ci1zdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xT
dHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewot
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzOjpSZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM6OkdyZWVuLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpCbHVlLAotICAgIH07Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVt
X2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4g
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50VmFs
dWVzW2ldOwotCi0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQotCi19IC8vIG5hbWVzcGFj
ZSBUZXN0SGVscGVycwotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29s
RGF0YWJhc2VEb21haW5IYW5kbGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi1jbGFz
cyBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBB
bHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBPYmpDSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURv
bWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJ
ZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25n
IHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwg
aW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBvdmVycmlkZTsKLXByaXZhdGU6Ci0gICAg
UmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdh
dGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29u
dHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IF9kYXRh
YmFzZUhhbmRsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFT
U0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfZGF0YWJhc2VIYW5kbGVy
IHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClzZXREYXRhYmFz
ZUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4paGFuZGxlcgot
ewotICAgIGlmIChoYW5kbGVyID09IF9kYXRhYmFzZUhhbmRsZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOwotICAgIF9kYXRhYmFzZUhhbmRsZXIg
PSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gc3Rk
OjptYWtlX3VuaXF1ZTxPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4oaGFu
ZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IHN0ZDo6bWFrZV91bmlxdWU8QWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRl
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4+KEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgKl9j
b250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxl
ci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlk
PFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4pZGF0YWJhc2VIYW5kbGVyCi17Ci0g
ICAgcmV0dXJuIF9kYXRhYmFzZUhhbmRsZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5o
PgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2Ug
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21p
YywgcmV0YWluLCBzZXR0ZXI9c2V0RGF0YWJhc2VIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sRGF0
YWJhc2VEb21haW5IYW5kbGVyPiBkYXRhYmFzZUhhbmRsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBp
bnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKLXsKLSAgICBpZCBlcnJv
ckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUg
KnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3Jl
ZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
ICpwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVj
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwot
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMs
IEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJy
b3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVS
KGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgaWYgKGNvbHVt
bk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwo
ImNvbHVtbk5hbWVzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOwotICAg
ICAgICBpZiAobm90ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoIm5vdGVzIiksICpub3Rlcyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXApCi0gICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIp
LCAqdGltZXN0YW1wKTsKLSAgICAgICAgaWYgKHZhbHVlcykKLSAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIFsqdmFsdWVzIHRvSW5zcGVj
dG9yT2JqZWN0XSk7Ci0gICAgICAgIGlmIChwYXlsb2FkKQotICAgICAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgWypwYXlsb2FkIHRvSW5zcGVj
dG9yT2JqZWN0XSk7Ci0gICAgICAgIGlmIChkYXRhYmFzZUlkKQotICAgICAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCAqZGF0YWJhc2VJ
ZCk7Ci0gICAgICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgWypzcWxFcnJvciB0b0luc3BlY3Rvck9i
amVjdF0pOwotICAgICAgICBpZiAoc2NyZWVuQ29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIHRvUHJvdG9jb2xTdHJp
bmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAg
ICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3Jz
IiksIGluc3BlY3RvclN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgaWYg
KHByaW50Q29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxp
dGVyYWwoInByaW50Q29sb3IiKSwgdG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3Zl
KHJlc3VsdE9iamVjdCkpOwotICAgIH07Ci0KLSAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5f
ZGF0YWJhc2VJZDsKLSAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OwotCi0gICAg
W21fZGVsZWdhdGUgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNh
bGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRh
YmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKLX0KLQotdm9pZCBPYmpD
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIGluX3F1ZXJ5KQotewotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICpl
cnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9y
KHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQot
ICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1u
TmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAq
ZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRF
Uihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMi
KTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBh
eWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRl
cm5hdGVDb2xvcnMiKTsKLSAgICAgICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGluc3BlY3Rv
clN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOwotICAgICAgICBpZiAobm90ZXMpCi0gICAgICAg
ICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksICpub3Rl
cyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNl
dERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCAqdGltZXN0YW1wKTsKLSAgICAgICAg
aWYgKHZhbHVlcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0
ZXJhbCgidmFsdWVzIiksIFsqdmFsdWVzIHRvSW5zcGVjdG9yT2JqZWN0XSk7Ci0gICAgICAgIGlm
IChwYXlsb2FkKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZShBU0NJSUxpdGVy
YWwoInBheWxvYWQiKSwgWypwYXlsb2FkIHRvSW5zcGVjdG9yT2JqZWN0XSk7Ci0gICAgICAgIGlm
IChkYXRhYmFzZUlkKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKEFTQ0lJ
TGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCAqZGF0YWJhc2VJZCk7Ci0gICAgICAgIGlmIChzcWxFcnJv
cikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3Fs
RXJyb3IiKSwgWypzcWxFcnJvciB0b0luc3BlY3Rvck9iamVjdF0pOwotICAgICAgICBpZiAoc2Ny
ZWVuQ29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoInNjcmVlbkNvbG9yIiksIHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAg
ICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFy
cmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIGluc3BlY3RvclN0cmluZ0FycmF5
KCphbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgaWYgKHByaW50Q29sb3IpCi0gICAgICAgICAg
ICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgdG9Q
cm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCkpOwotICAgIH07
Ci0KLSAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKLSAgICBOU1N0cmlu
ZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OwotCi0gICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQg
cXVlcnk6b19pbl9xdWVyeV07Ci19Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKLXsKLSAgICBpZCBlcnJvckNhbGxiYWNrID0g
XihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
ZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9h
ZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJh
c2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxTeW5jUHJpbnRDb2xvciBwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVt
bk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVS
KG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7
Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0
ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRB
cnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KGNv
bHVtbk5hbWVzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgibm90ZXMiKSwgbm90ZXMpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZShBU0NJ
SUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOwotICAgICAgICByZXN1bHRPYmplY3Qt
PnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBbdmFsdWVzIHRvSW5zcGVjdG9yT2Jq
ZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXls
b2FkIiksIFtwYXlsb2FkIHRvSW5zcGVjdG9yT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgZGF0YWJhc2VJZCk7Ci0g
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwg
W3NxbEVycm9yIHRvSW5zcGVjdG9yT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgaW5zcGVjdG9yU3RyaW5nQXJy
YXkoYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFT
Q0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikp
OwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29s
b3IiKSwgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSk7
Ci0gICAgfTsKLQotICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwotICAg
IE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KLSAgICBbbV9kZWxlZ2F0ZSBleGVj
dXRlU1FMU3luY1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNr
OnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1
ZXJ5XTsKLX0KLQotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSkKLXsKLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAq
ZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0K
LSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1u
TmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
YWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50
Q29sb3IgcHJpbnRDb2xvcikgewotICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRP
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwot
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJu
b3RlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2
YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAi
YWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoQVNDSUlM
aXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheShjb2x1bW5OYW1lcykp
OwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiks
IG5vdGVzKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0
aW1lc3RhbXAiKSwgdGltZXN0YW1wKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3Qo
QVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgW3ZhbHVlcyB0b0luc3BlY3Rvck9iamVjdF0pOwotICAg
ICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBbcGF5
bG9hZCB0b0luc3BlY3Rvck9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVn
ZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIGRhdGFiYXNlSWQpOwotICAgICAgICByZXN1
bHRPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIFtzcWxFcnJvciB0
b0luc3BlY3Rvck9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIHRvUHJvdG9jb2xTdHJpbmcoc2NyZWVuQ29sb3IpKTsK
LSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNv
bG9ycyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIHRvUHJv
dG9jb2xTdHJpbmcocHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCkpOwotICAgIH07Ci0K
LSAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKLSAgICBOU1N0cmluZyAq
b19pbl9xdWVyeSA9IGluX3F1ZXJ5OwotCi0gICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTEFzeW5j
V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOwotfQot
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi11c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
OwotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9ycykgewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZCwK
LSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbiwKLSAgICBUZXN0UHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5T
SW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvcikgewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRh
LAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1ByaW50Q29sb3JZZWxsb3csCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrLAotfTsKLQotdHlwZWRlZiBO
U19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IpIHsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW4sCi0gICAgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50
Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93LAotICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2ssCi19
OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxTeW5jUHJpbnRDb2xvcikgewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TFN5bmNQcmludENvbG9yQ3lhbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxT
eW5jUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY1ByaW50Q29sb3JZZWxsb3csCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY1ByaW50Q29sb3JCbGFjaywKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvcikgewotICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckN5YW4sCi0gICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yTWFnZW50YSwKLSAgICBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZZWxsb3csCi0gICAgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQmxhY2ssCi19OwotCi0K
LV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5
bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihO
U1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7Ci0vKiByZXF1aXJlZCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKLUBlbmQKLQotQHByb3RvY29s
IFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1AcmVxdWlyZWQK
LS0gKHZvaWQpZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxi
YWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5n
ICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1
ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5h
dGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVy
blZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlk
OihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKLS0gKHZvaWQpZXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShO
U1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3Vi
bGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpz
Y3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRD
b2xvciAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFz
ZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OwotLSAodm9pZClleGVjdXRlU1FMU3luY1dpdGhF
cnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywg
TlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3Qg
KnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwg
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2Ny
ZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIHBy
aW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVy
eTooTlNTdHJpbmcgKilxdWVyeTsKLS0gKHZvaWQpZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2Fs
bGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmlu
ZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVz
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9y
cywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIHByaW50Q29s
b3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNT
dHJpbmcgKilxdWVyeTsKLUBlbmQKLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQotCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PYmpD
RW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi0KLWlu
bGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnMgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwo
InJlZCIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW46
Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImdyZWVuIik7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRl
cmFsKCJibHVlIik7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAicmVkIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDsKLSAgICBpZiAodmFsdWUgPT0gImdyZWVuIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuOwot
ICAgIGlmICh2YWx1ZSA9PSAiYmx1ZSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnNCbHVlOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ7Ci19Ci0KLWlubGluZSBT
dHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1
ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW46Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwo
ImN5YW4iKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOgotICAgICAgICByZXR1cm4gQVNDSUlM
aXRlcmFsKCJtYWdlbnRhIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93OgotICAgICAgICByZXR1
cm4gQVNDSUlMaXRlcmFsKCJ5ZWxsb3ciKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazoKLSAgICAg
ICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYmxhY2siKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4K
LWlubGluZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNQcmludENvbG9yIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQot
ewotICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjsK
LSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2Vu
dGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclll
bGxvdzsKLSAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JC
bGFjazsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW47
Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciB2YWx1ZSkKLXsK
LSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgiY3lhbiIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOgotICAg
ICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJtYWdlbnRhIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclll
bGxvdzoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgieWVsbG93Iik7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJp
bnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJibGFjayIpOwotICAg
IH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yIGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvckN5YW47Ci0gICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0g
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzsKLSAgICBpZiAodmFsdWUgPT0gImJsYWNrIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2s7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29s
U3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIHZhbHVl
KQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMU3luY1ByaW50Q29sb3JDeWFuOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFs
KCJjeWFuIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJp
bnRDb2xvck1hZ2VudGE6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIm1hZ2VudGEiKTsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yWWVs
bG93OgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ5ZWxsb3ciKTsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQmxhY2s6Ci0gICAgICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoImJsYWNrIik7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1p
bmxpbmUgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IgZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJj
eWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQ
cmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JNYWdlbnRhOwot
ICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAi
YmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3lu
Y1ByaW50Q29sb3JCbGFjazsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JDeWFuOwotfQotCi1p
bmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNQcmludENvbG9yIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQ3lhbjoKLSAg
ICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiY3lhbiIpOwotICAgIGNhc2UgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yTWFnZW50YToKLSAgICAgICAgcmV0dXJu
IEFTQ0lJTGl0ZXJhbCgibWFnZW50YSIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMQXN5bmNQcmludENvbG9yWWVsbG93OgotICAgICAgICByZXR1cm4gQVNDSUlMaXRl
cmFsKCJ5ZWxsb3ciKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFz
eW5jUHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJibGFjayIp
OwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTEFzeW5jUHJpbnRDb2xvciBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImN5YW4iKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFs
dWUgPT0gIm1hZ2VudGEiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMQXN5bmNQcmludENvbG9yTWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIp
Ci0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50
Q29sb3JZZWxsb3c7Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JCbGFjazsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMQXN5bmNQcmludENvbG9yQ3lhbjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJz
ZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOwotKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlRXJyb3I6KFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNOdW1iZXIg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOwotICAgICpvdXRWYWx1
ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9y
czooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwot
ICAgICpvdXRWYWx1ZSA9IEAoSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPihwYXlsb2FkKSk7Ci19Ci0KLSsgKHZvaWQpX3BhcnNl
Q29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJh
eS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VFcnJvcjooVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlv
bmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Y29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotI2ltcG9ydCA8
d3RmL0Fzc2VydGlvbnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcgotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilw
YXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOwotICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRb
QCJtZXNzYWdlIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOwotICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0Ai
Y29kZSJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmpl
Y3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltq
c29uT2JqZWN0IHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmls
OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3Nh
Z2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQotewotICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKLQotICAgIHNl
bGYubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgc2VsZi5jb2RlID0gY29kZTsKLQotICAgIHJldHVy
biBzZWxmOwotfQotCi0tICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewot
ICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0g
KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAi
bWVzc2FnZSJdOwotfQotCi0tICh2b2lkKXNldENvZGU6KGludCljb2RlCi17Ci0gICAgW3N1cGVy
IHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Ci19Ci0KLS0gKGludCljb2RlCi17Ci0g
ICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOwotfQotCi1AZW5kCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdp
dGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMjEzOTNkZDU3ZmZlYjRmNmNlMTA0M2MzYTE0NWQ2NzJk
MDBjYWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1h
bmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysg
L2Rldi9udWxsCkBAIC0xLDE2MDkgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJh
Y2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIERhdGFiYXNlLgotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLlByaW1hcnlDb2xvcnMiLCB7UmVkOiAicmVk
IiwgR3JlZW46ICJncmVlbiIsIEJsdWU6ICJibHVlIn0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiLCBbeyJu
YW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0s
IHsibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9LCB7
Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZX0s
IHsibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwg
eyJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwg
eyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVl
fSwgeyJuYW1lIjogInNxbEVycm9yIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1
ZX0sIHsibmFtZSI6ICJzY3JlZW5Db2xvciIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6
IHRydWV9LCB7Im5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9w
dGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwg
Im9wdGlvbmFsIjogdHJ1ZX1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIs
ICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNv
bG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOwotSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIs
IFt7Im5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiBm
YWxzZX0sIHsibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZh
bHNlfSwgeyJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6
IGZhbHNlfSwgeyJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6
IGZhbHNlfSwgeyJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwi
OiBmYWxzZX0sIHsibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlv
bmFsIjogZmFsc2V9LCB7Im5hbWUiOiAic3FsRXJyb3IiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0
aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJzY3JlZW5Db2xvciIsICJ0eXBlIjogInN0cmluZyIs
ICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICJ0eXBlIjog
Im9iamVjdCIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInByaW50Q29sb3IiLCAidHlw
ZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVz
IiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVy
cm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOwot
SW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiKTsKLSMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNo
ZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlz
cGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdl
dCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5k
RGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB+QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5n
KiBjb25zdCBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCBpbl90aW1lc3RhbXAsIGNvbnN0
IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWUqIGNvbnN0IGluX3BheWxvYWQsIGNvbnN0IGludCogY29uc3QgaW5fZGF0
YWJhc2VJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIGluX3NxbEVycm9yLCBj
b25zdCBTdHJpbmcqIGNvbnN0IGluX3NjcmVlbkNvbG9yLCBjb25zdCBJbnNwZWN0b3I6Okluc3Bl
Y3RvckFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fcHJp
bnRDb2xvcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGluX2NvbHVt
bk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29s
b3IsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywg
Y29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFy
YW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLWNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7Ci0jZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLWNsYXNzIERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICAvLyBOYW1lZCBh
ZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVu
dCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzLgotICAgIGVudW0gY2xhc3MgUHJpbnRDb2xv
ciB7Ci0gICAgICAgIEN5YW4gPSAzLAotICAgICAgICBNYWdlbnRhID0gNCwKLSAgICAgICAgWWVs
bG93ID0gNSwKLSAgICAgICAgQmxhY2sgPSA2LAotICAgIH07IC8vIGVudW0gY2xhc3MgUHJpbnRD
b2xvcgotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKEVycm9y
U3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSogb3B0X2luX2NvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdF9pbl9ub3RlcywgY29uc3QgZG91YmxlKiBjb25z
dCBvcHRfaW5fdGltZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogb3B0
X2luX3ZhbHVlcywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogY29uc3Qgb3B0X2lu
X3BheWxvYWQsIGNvbnN0IGludCogY29uc3Qgb3B0X2luX2RhdGFiYXNlSWQsIGNvbnN0IEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBvcHRfaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogY29u
c3Qgb3B0X2luX3NjcmVlbkNvbG9yLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5KiBv
cHRfaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdF9pbl9wcmludENv
bG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mIG9wdF9vdXRf
Y29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBvcHRf
b3V0X25vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiogb3B0X291
dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4qIG9wdF9vdXRfdmFsdWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRP
dXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIG9wdF9vdXRfcGF5bG9hZCwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIG9wdF9vdXRfZGF0YWJhc2VJZCwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRfc3FsRXJyb3Is
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvcHRfb3V0X3Nj
cmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlz
dD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25v
dGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIGluX3BheWxvYWQsIGludCBp
bl9kYXRhYmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgaW5fc3FsRXJy
b3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVj
dG9yQXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9y
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mIG91dF9jb2x1bW5O
YW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3QqIG91dF92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUq
IG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRlcm5hdGVDb2xvcnMs
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRD
b2xvcikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZp
bmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlz
cGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBk
aXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0
b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7Ci1wcml2YXRlOgotICAgIHZvaWQgZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
cyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsK
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAg
ICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBh
bHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0ZURhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRp
ZgotcHJpdmF0ZToKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRj
aGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJl
dHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKLQotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFj
a2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGJh
Y2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlz
cGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDog
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBt
X2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0
Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkRhdGFiYXNlIiksIHRoaXMpOwotfQotCi12b2lk
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQotewotICAg
IFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0
KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9
PSAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIpCi0gICAgICAgIGV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBlbHNl
IGlmIChtZXRob2QgPT0gImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpCi0gICAgICAgIGV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykp
OwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywg
IkRhdGFiYXNlIiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7Ci19Ci0KLXZvaWQg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKQotewot
ICAgIGJvb2wgb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gb3B0X2luX2NvbHVtbk5hbWVzID0gbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJj
b2x1bW5OYW1lcyIpLCAmb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQpOwotICAgIGJvb2wg
b3B0X2luX25vdGVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgb3B0X2luX25vdGVz
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJ
TGl0ZXJhbCgibm90ZXMiKSwgJm9wdF9pbl9ub3Rlc192YWx1ZUZvdW5kKTsKLSAgICBib29sIG9w
dF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok9wdE91dHB1dDxkb3VibGU+IG9wdF9pbl90aW1lc3RhbXAgPSBtX2JhY2tlbmREaXNwYXRj
aGVyLT5nZXREb3VibGUocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAi
KSwgJm9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fdmFsdWVz
X3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IG9wdF9pbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1l
dGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgJm9wdF9pbl92YWx1ZXNfdmFsdWVG
b3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IG9wdF9pbl9wYXlsb2FkID0gbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJw
YXlsb2FkIiksICZvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9k
YXRhYmFzZUlkX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBpbnQgb3B0X2luX2RhdGFiYXNlSWQg
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJ
TGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCAmb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCk7Ci0g
ICAgYm9vbCBvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gb3B0X2luX3NxbEVycm9yID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgic3FsRXJy
b3IiKSwgJm9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9zY3Jl
ZW5Db2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9pbl9zY3JlZW5Db2xv
ciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJ
SUxpdGVyYWwoInNjcmVlbkNvbG9yIiksICZvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCk7
Ci0gICAgYm9vbCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gb3B0X2luX2FsdGVybmF0ZUNvbG9y
cyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJ
TGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksICZvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVl
Rm91bmQpOwotICAgIGJvb2wgb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwot
ICAgIFN0cmluZyBvcHRfaW5fcHJpbnRDb2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0
cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgJm9wdF9p
bl9wcmludENvbG9yX3ZhbHVlRm91bmQpOwotICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5o
YXNQcm90b2NvbEVycm9ycygpKSB7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIFN0cmluZzo6
Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQi
LCAiRGF0YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgb3B0X2lu
X2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkgOiBudWxs
cHRyLCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxscHRyLCBv
cHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6IG51bGxwdHIs
IG9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBudWxscHRy
LCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0KCkgOiBudWxs
cHRyLCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFzZUlkIDog
bnVsbHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3FsRXJyb3IuZ2V0
KCkgOiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fc2Ny
ZWVuQ29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPyBv
cHRfaW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3ByaW50Q29sb3Jf
dmFsdWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7
Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4gb3V0X25vdGVzOwot
ICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+IG91dF90aW1lc3RhbXA7
Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiBvdXRfdmFsdWVzOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJ
bnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBvdXRfcGF5bG9hZDsKLSAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNl
SWQ+IG91dF9kYXRhYmFzZUlkOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Ci0g
ICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50
Q29sb3I7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhlcnJvciwg
b3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkg
OiBudWxscHRyLCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxs
cHRyLCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6IG51
bGxwdHIsIG9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBu
dWxscHRyLCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0KCkg
OiBudWxscHRyLCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFz
ZUlkIDogbnVsbHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3FsRXJy
b3IuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZvcHRf
aW5fc2NyZWVuQ29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91
bmQgPyBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3ByaW50
Q29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIsIG91dF9jb2x1
bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5
bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsICZvdXRfc2NyZWVuQ29sb3IsIG91
dF9hbHRlcm5hdGVDb2xvcnMsICZvdXRfcHJpbnRDb2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxl
bmd0aCgpKSB7Ci0gICAgICAgIGlmIChvdXRfY29sdW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1
bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgb3V0X2NvbHVtbk5hbWVz
KTsKLSAgICAgICAgaWYgKG91dF9ub3Rlcy5pc0Fzc2lnbmVkKCkpCi0gICAgICAgICAgICByZXN1
bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG91dF9ub3Rlcy5nZXRWYWx1ZSgp
KTsKLSAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaXNBc3NpZ25lZCgpKQotICAgICAgICAgICAg
cmVzdWx0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgb3V0X3RpbWVzdGFt
cC5nZXRWYWx1ZSgpKTsKLSAgICAgICAgaWYgKG91dF92YWx1ZXMuaXNBc3NpZ25lZCgpKQotICAg
ICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgb3V0X3Zh
bHVlcy5nZXRWYWx1ZSgpKTsKLSAgICAgICAgaWYgKG91dF9wYXlsb2FkLmlzQXNzaWduZWQoKSkK
LSAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIG91
dF9wYXlsb2FkLmdldFZhbHVlKCkpOwotICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaXNBc3Np
Z25lZCgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiZGF0
YWJhc2VJZCIpLCBvdXRfZGF0YWJhc2VJZC5nZXRWYWx1ZSgpKTsKLSAgICAgICAgaWYgKG91dF9z
cWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3Fs
RXJyb3IiKSwgb3V0X3NxbEVycm9yKTsKLSAgICAgICAgaWYgKG91dF9zY3JlZW5Db2xvci5pc0Fz
c2lnbmVkKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNj
cmVlbkNvbG9yIiksIG91dF9zY3JlZW5Db2xvci5nZXRWYWx1ZSgpKTsKLSAgICAgICAgaWYgKG91
dF9hbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0
ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIG91dF9hbHRlcm5hdGVDb2xvcnMpOwotICAgICAgICBp
ZiAob3V0X3ByaW50Q29sb3IuaXNBc3NpZ25lZCgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIG91dF9wcmludENvbG9yLmdldFZhbHVl
KCkpOwotICAgIH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCkpOwotICAg
IGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotdm9p
ZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycykKLXsK
LSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gaW5fY29sdW1uTmFtZXMgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVy
YWwoImNvbHVtbk5hbWVzIiksIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9ub3RlcyA9IG1fYmFj
a2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwo
Im5vdGVzIiksIG51bGxwdHIpOwotICAgIGRvdWJsZSBpbl90aW1lc3RhbXAgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ0aW1l
c3RhbXAiKSwgbnVsbHB0cik7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBpbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5n
ZXQoKSwgQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgbnVsbHB0cik7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWU+IGluX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgbnVsbHB0
cik7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRl
Z2VyKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRy
KTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3NxbEVycm9yID0g
bV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0
ZXJhbCgic3FsRXJyb3IiKSwgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3NjcmVlbkNvbG9yID0g
bV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0
ZXJhbCgic2NyZWVuQ29sb3IiKSwgbnVsbHB0cik7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yQXJyYXk+IGluX2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiks
IG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIp
LCBudWxscHRyKTsKLSAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJv
cnMoKSkgewotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBTdHJpbmc6OmZvcm1hdCgiU29tZSBh
cmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2Fs
dGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElkLCAqaW5fY29sdW1uTmFtZXMsIGluX25v
dGVzLCBpbl90aW1lc3RhbXAsICppbl92YWx1ZXMsICppbl9wYXlsb2FkLCBpbl9kYXRhYmFzZUlk
LCAqaW5fc3FsRXJyb3IsIGluX3NjcmVlbkNvbG9yLCAqaW5fYWx0ZXJuYXRlQ29sb3JzLCBpbl9w
cmludENvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JT
dHJpbmcgZXJyb3I7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOwotICAgIFN0cmluZyBvdXRfbm90ZXM7Ci0gICAgZG91
YmxlIG91dF90aW1lc3RhbXA7Ci0gICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Qgb3V0X3Zh
bHVlczsKLSAgICBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIG91dF9wYXlsb2FkOwotICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpEYXRhYmFzZUlkIG91dF9kYXRhYmFzZUlkOwot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxF
cnJvcjsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBv
dXRfc2NyZWVuQ29sb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Ci0gICAgbV9hZ2VudC0+
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGVycm9yLCAqaW5fY29sdW1uTmFtZXMsIGluX25v
dGVzLCBpbl90aW1lc3RhbXAsICppbl92YWx1ZXMsICppbl9wYXlsb2FkLCBpbl9kYXRhYmFzZUlk
LCAqaW5fc3FsRXJyb3IsIGluX3NjcmVlbkNvbG9yLCAqaW5fYWx0ZXJuYXRlQ29sb3JzLCBpbl9w
cmludENvbG9yLCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBv
dXRfdmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAm
b3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCAmb3V0X3ByaW50Q29sb3IpOwot
Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewotICAgICAgICByZXN1bHQtPnNldEFycmF5KEFT
Q0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgb3V0X2NvbHVtbk5hbWVzKTsKLSAgICAgICAgcmVz
dWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBvdXRfbm90ZXMpOwotICAgICAg
ICByZXN1bHQtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCBvdXRfdGltZXN0
YW1wKTsKLSAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwg
b3V0X3ZhbHVlcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXls
b2FkIiksIG91dF9wYXlsb2FkKTsKLSAgICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0
ZXJhbCgiZGF0YWJhc2VJZCIpLCBvdXRfZGF0YWJhc2VJZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0
T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgb3V0X3NxbEVycm9yKTsKLSAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3NjcmVlbkNv
bG9yKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVD
b2xvcnMiKSwgb3V0X2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVs
cGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3ByaW50Q29sb3IpKTsKLSAgICB9Ci0gICAg
aWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKLSAgICBlbHNlCi0gICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0
ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFs
LWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kUm91dGVyLmgi
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFs
LWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0vLyBGb3J3
YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci1jbGFzcyBFcnJvcjsKLWVu
dW0gY2xhc3MgUHJpbWFyeUNvbG9yczsKLX0gLy8gRGF0YWJhc2UKLS8vIEVuZCBvZiBmb3J3YXJk
IGRlY2xhcmF0aW9ucy4KLQotCi0vLyBUeXBlZGVmcy4KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci0v
KiBVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuICovCi10eXBlZGVmIGludCBE
YXRhYmFzZUlkOwotdHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gQ29sb3JMaXN0OwotfSAvLyBEYXRh
YmFzZQotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1T
dHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0
dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci0v
KiAgKi8KLWVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycyB7Ci0gICAgUmVkID0gMCwKLSAgICBHcmVl
biA9IDEsCi0gICAgQmx1ZSA9IDIsCi19OyAvLyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKLS8q
IERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3MgRXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNT
ZXQgPSAwLAotICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAotICAgICAgICBDb2RlU2V0ID0g
MSA8PCAxLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCi0g
ICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAg
ICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKLQot
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVy
KFJlZjwvKkVycm9yKi9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBt
X3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKLSAgICBwdWJs
aWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNv
bnN0IFN0cmluZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIpLCB2
YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZh
bHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29k
ZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQt
PnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJjb2RlIiksIHZhbHVlKTsKLSAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxFcnJv
cj4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5u
b3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1f
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVp
bnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJnJlc3VsdCkpOwotICAgICAgICB9Ci0gICAgfTsK
LQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxFcnJv
cj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikK
LSAgICAgKiAgICAgLnNldENvZGUoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAq
LwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkp
OwotICAgIH0KLX07Ci0KLX0gLy8gRGF0YWJhc2UKLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVy
cyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1zdGQ6Om9wdGlvbmFs
PFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcm
KTsKLQotLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1zdGQ6
Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYpOwotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVy
cwotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMg
ewotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsK
LSAgICAicmVkIiwKLSAgICAiZ3JlZW4iLAotICAgICJibHVlIiwKLSAgICAiY3lhbiIsCi0gICAg
Im1hZ2VudGEiLAotICAgICJ5ZWxsb3ciLAotICAgICJibGFjayIsCi19OwotCi1TdHJpbmcgZ2V0
RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKLSAgICByZXR1cm4gZW51bV9jb25zdGFudF92
YWx1ZXNbY29kZV07Ci19Ci0KLS8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgotdGVt
cGxhdGU8Pgotc3RkOjpvcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQot
ewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6UmVk
LAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzOjpHcmVlbiwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9yczo6Qmx1ZSwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgMzsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFu
dF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyljb25zdGFudFZhbHVlc1tpXTsK
LQotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhl
bHBlcnMKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0
UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci0KLWNsYXNzIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDog
cHVibGljIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAg
IE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERh
dGFiYXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQot
ICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29u
c3QgU3RyaW5nKiBjb25zdCBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCBpbl90aW1lc3Rh
bXAsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IElu
c3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIGNvbnN0IGluX3BheWxvYWQsIGNvbnN0IGludCogY29u
c3QgaW5fZGF0YWJhc2VJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIGluX3Nx
bEVycm9yLCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX3NjcmVlbkNvbG9yLCBjb25zdCBJbnNwZWN0
b3I6Okluc3BlY3RvckFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogY29u
c3QgaW5fcHJpbnRDb2xvcikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0
b3JBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBp
bl90aW1lc3RhbXAsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBpbl92YWx1ZXMs
IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQs
IGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3Ry
aW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYgaW5f
YWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpIG92ZXJyaWRlOwot
cHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5k
bGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0K
LUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9j
b2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IF9kYXRhYmFzZUhhbmRsZXI7Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxm
KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVh
bGxvYwotewotICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFs
bG9jXTsKLX0KLQotLSAodm9pZClzZXREYXRhYmFzZUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERh
dGFiYXNlRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9kYXRh
YmFzZUhhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJl
bGVhc2VdOwotICAgIF9kYXRhYmFzZUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAg
YXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxPYmpDSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVB
Z2VudCA9IHN0ZDo6bWFrZV91bmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4+
KEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0
ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3Zl
KGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWlu
SGFuZGxlcj4pZGF0YWJhc2VIYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9kYXRhYmFzZUhhbmRsZXI7
Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
bW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1y
ZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwg
c2V0dGVyPXNldERhdGFiYXNlSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWlu
SGFuZGxlcj4gZGF0YWJhc2VIYW5kbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcqIGNvbnN0IGluX25vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IGluX3RpbWVzdGFtcCwgY29u
c3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZSogY29uc3QgaW5fcGF5bG9hZCwgY29uc3QgaW50KiBjb25zdCBpbl9k
YXRhYmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogaW5fc3FsRXJyb3Is
IGNvbnN0IFN0cmluZyogY29uc3QgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEluc3BlY3Rvcjo6SW5z
cGVjdG9yQXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBjb25zdCBpbl9w
cmludENvbG9yKQotewotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikg
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVl
c3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlk
IHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMs
IE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJh
c2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVz
LCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXls
b2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRF
UihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIp
OwotICAgICAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNl
dEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXko
KmNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIGlmIChub3RlcykKLSAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgKm5vdGVzKTsKLSAgICAgICAg
aWYgKHRpbWVzdGFtcCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKEFTQ0lJ
TGl0ZXJhbCgidGltZXN0YW1wIiksICp0aW1lc3RhbXApOwotICAgICAgICBpZiAodmFsdWVzKQot
ICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMi
KSwgWyp2YWx1ZXMgdG9JbnNwZWN0b3JPYmplY3RdKTsKLSAgICAgICAgaWYgKHBheWxvYWQpCi0g
ICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIp
LCBbKnBheWxvYWQgdG9JbnNwZWN0b3JPYmplY3RdKTsKLSAgICAgICAgaWYgKGRhdGFiYXNlSWQp
Ci0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJkYXRh
YmFzZUlkIiksICpkYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKHNxbEVycm9yKQotICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBbKnNx
bEVycm9yIHRvSW5zcGVjdG9yT2JqZWN0XSk7Ci0gICAgICAgIGlmIChzY3JlZW5Db2xvcikKLSAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29s
b3IiKSwgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgaWYgKGFsdGVy
bmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRl
cmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNv
bG9ycykpOwotICAgICAgICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCB0b1Byb3RvY29sU3RyaW5n
KCpwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSk7Ci0gICAgfTsKLQotICAgIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lczsKLSAgICBpZiAoaW5fY29sdW1uTmFt
ZXMpCi0gICAgICAgIG9faW5fY29sdW1uTmFtZXMgPSBvYmpjU3RyaW5nQXJyYXkoaW5fY29sdW1u
TmFtZXMpOwotICAgIE5TU3RyaW5nICpvX2luX25vdGVzOwotICAgIGlmIChpbl9ub3RlcykKLSAg
ICAgICAgb19pbl9ub3RlcyA9ICppbl9ub3RlczsKLSAgICBkb3VibGUgb19pbl90aW1lc3RhbXA7
Ci0gICAgaWYgKGluX3RpbWVzdGFtcCkKLSAgICAgICAgb19pbl90aW1lc3RhbXAgPSAqaW5fdGlt
ZXN0YW1wOwotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl92YWx1ZXM7Ci0gICAgaWYg
KGluX3ZhbHVlcykKLSAgICAgICAgb19pbl92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05PYmpl
Y3QgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0OmluX3ZhbHVlc10gYXV0b3JlbGVhc2Vd
OwotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2FkOwotICAgIGlmIChpbl9w
YXlsb2FkKQotICAgICAgICBvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3Qg
YWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0OmluX3BheWxvYWRdIGF1dG9yZWxlYXNlXTsK
LSAgICBpbnQgb19pbl9kYXRhYmFzZUlkOwotICAgIGlmIChpbl9kYXRhYmFzZUlkKQotICAgICAg
ICBvX2luX2RhdGFiYXNlSWQgPSAqaW5fZGF0YWJhc2VJZDsKLSAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yICpvX2luX3NxbEVycm9yOwotICAgIGlmIChpbl9zcWxFcnJvcikKLSAgICAgICAg
b19pbl9zcWxFcnJvciA9IFtbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRX
aXRoSW5zcGVjdG9yT2JqZWN0OmluX3NxbEVycm9yXSBhdXRvcmVsZWFzZV07Ci0gICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIG9faW5fc2NyZWVuQ29sb3I7Ci0gICAgaWYgKGlu
X3NjcmVlbkNvbG9yKQotICAgICAgICBvX2luX3NjcmVlbkNvbG9yID0gZnJvbVByb3RvY29sU3Ry
aW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oKmluX3NjcmVlbkNvbG9yKTsK
LSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fYWx0ZXJuYXRlQ29sb3JzOwotICAgIGlm
IChpbl9hbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIG9faW5fYWx0ZXJuYXRlQ29sb3JzID0gb2Jq
Y1N0cmluZ0FycmF5KGluX2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciBvX2luX3ByaW50Q29sb3I7
Ci0gICAgaWYgKGluX3ByaW50Q29sb3IpCi0gICAgICAgIG9faW5fcHJpbnRDb2xvciA9IGZyb21Q
cm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yPigqaW5fcHJpbnRDb2xvcik7Ci0KLSAgICBbbV9kZWxlZ2F0ZSBleGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBz
dWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihpbl9jb2x1bW5OYW1l
cyA/ICZvX2luX2NvbHVtbk5hbWVzIDogbmlsKSBub3RlczooaW5fbm90ZXMgPyAmb19pbl9ub3Rl
cyA6IG5pbCkgdGltZXN0YW1wOihpbl90aW1lc3RhbXAgPyAmb19pbl90aW1lc3RhbXAgOiBuaWwp
IHZhbHVlczooaW5fdmFsdWVzID8gJm9faW5fdmFsdWVzIDogbmlsKSBwYXlsb2FkOihpbl9wYXls
b2FkID8gJm9faW5fcGF5bG9hZCA6IG5pbCkgZGF0YWJhc2VJZDooaW5fZGF0YWJhc2VJZCA/ICZv
X2luX2RhdGFiYXNlSWQgOiBuaWwpIHNxbEVycm9yOihpbl9zcWxFcnJvciA/ICZvX2luX3NxbEVy
cm9yIDogbmlsKSBzY3JlZW5Db2xvcjooaW5fc2NyZWVuQ29sb3IgPyAmb19pbl9zY3JlZW5Db2xv
ciA6IG5pbCkgYWx0ZXJuYXRlQ29sb3JzOihpbl9hbHRlcm5hdGVDb2xvcnMgPyAmb19pbl9hbHRl
cm5hdGVDb2xvcnMgOiBuaWwpIHByaW50Q29sb3I6KGluX3ByaW50Q29sb3IgPyAmb19pbl9wcmlu
dENvbG9yIDogbmlsKV07Ci19Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29u
c3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmlu
ZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0JiBpbl92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgaW5fcGF5bG9h
ZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBp
bl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSW5zcGVjdG9y
OjpJbnNwZWN0b3JBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3By
aW50Q29sb3IpCi17Ci0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQg
c3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBO
U1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
dmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0
ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yIHByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMi
KTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMs
IEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3Jz
LCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KEFT
Q0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoY29sdW1uTmFt
ZXMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3Rl
cyIpLCBub3Rlcyk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJh
bCgidGltZXN0YW1wIiksIHRpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2Jq
ZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIFt2YWx1ZXMgdG9JbnNwZWN0b3JPYmplY3RdKTsK
LSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwg
W3BheWxvYWQgdG9JbnNwZWN0b3JPYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJ
bnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBkYXRhYmFzZUlkKTsKLSAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBbc3FsRXJy
b3IgdG9JbnNwZWN0b3JPYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9y
KSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5h
dGVDb2xvcnMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCB0
b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpKTsKLSAgICB9
OwotCi0gICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2NvbHVtbk5hbWVzID0gb2JqY1N0
cmluZ0FycmF5KCZpbl9jb2x1bW5OYW1lcyk7Ci0gICAgTlNTdHJpbmcgKm9faW5fbm90ZXMgPSBp
bl9ub3RlczsKLSAgICBkb3VibGUgb19pbl90aW1lc3RhbXAgPSBpbl90aW1lc3RhbXA7Ci0gICAg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3ZhbHVlcyA9IFtbW1JXSVByb3RvY29sSlNPTk9i
amVjdCBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6JmluX3ZhbHVlc10gYXV0b3JlbGVh
c2VdOwotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2FkID0gW1tbUldJUHJv
dG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDomaW5fcGF5bG9h
ZF0gYXV0b3JlbGVhc2VdOwotICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlk
OwotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKm9faW5fc3FsRXJyb3IgPSBbW1tUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDomaW5f
c3FsRXJyb3JdIGF1dG9yZWxlYXNlXTsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnMgb19pbl9zY3JlZW5Db2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnM+KGluX3NjcmVlbkNvbG9yKTsKLSAgICBOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKm9faW5fYWx0ZXJuYXRlQ29sb3JzID0gb2JqY1N0cmluZ0FycmF5KCZpbl9hbHRl
cm5hdGVDb2xvcnMpOwotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvciBvX2luX3ByaW50Q29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
Pihpbl9wcmludENvbG9yKTsKLQotICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1
Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczpvX2luX2NvbHVtbk5hbWVzIG5vdGVzOm9faW5fbm90
ZXMgdGltZXN0YW1wOm9faW5fdGltZXN0YW1wIHZhbHVlczpvX2luX3ZhbHVlcyBwYXlsb2FkOm9f
aW5fcGF5bG9hZCBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBzcWxFcnJvcjpvX2luX3NxbEVy
cm9yIHNjcmVlbkNvbG9yOm9faW5fc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOm9faW5fYWx0
ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6b19pbl9wcmludENvbG9yXTsKLX0KLQotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9w
dGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
RXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNh
bGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yOwotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycykgewotICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9yc1JlZCwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnNHcmVlbiwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlLAotfTsK
LQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgewotICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAotICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdl
bnRhLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JZZWxsb3csCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5T
SW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvcikgewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCi0g
ICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvckJsYWNrLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7Ci0gICAgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lh
biwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JNYWdlbnRhLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKLX07Ci0KLXR5cGVkZWYg
TlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvcikgewotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4sCi0gICAgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YSwKLSAgICBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxs
b3csCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yQmxhY2ssCi19OwotCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIDogUldJUHJvdG9j
b2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25h
cnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpT
T05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7
Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1l
c3NhZ2U7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQg
Y29kZTsKLUBlbmQKLQotQHByb3RvY29sIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxl
ciA8TlNPYmplY3Q+Ci1AcmVxdWlyZWQKLS0gKHZvaWQpZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29s
dW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGlu
dCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFj
ayBjb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVz
OihOU1N0cmluZyAqKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICoqKXBheWxvYWQgZGF0YWJhc2VJZDooaW50ICopZGF0YWJhc2VJZCBzcWxFcnJvcjoo
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3Jz
OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3Ig
KilwcmludENvbG9yOwotLSAodm9pZClleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJy
b3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5T
U3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2
YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRl
Q29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1l
c3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2
YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBkYXRhYmFzZUlk
OihpbnQpZGF0YWJhc2VJZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNx
bEVycm9yIHNjcmVlbkNvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMpc2Ny
ZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5h
dGVDb2xvcnMgcHJpbnRDb2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yKXByaW50Q29sb3I7Ci1AZW5kCi0KLQotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVy
bmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9w
dGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRp
b25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PYmpDRW51bVR5
cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi0KLWlubGluZSBT
dHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMg
dmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnNSZWQ6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInJlZCIp
OwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW46Ci0gICAg
ICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImdyZWVuIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJi
bHVlIik7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgVGVzdFByb3RvY29sRGF0YWJh
c2VQcmltYXJ5Q29sb3JzIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQot
ewotICAgIGlmICh2YWx1ZSA9PSAicmVkIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9yc1JlZDsKLSAgICBpZiAodmFsdWUgPT0gImdyZWVuIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuOwotICAgIGlm
ICh2YWx1ZSA9PSAiYmx1ZSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnNCbHVlOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ7Ci19Ci0KLWlubGluZSBTdHJpbmcg
dG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvckN5YW46Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImN5YW4iKTsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JNYWdlbnRhOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJtYWdlbnRhIik7Ci0gICAg
Y2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yWWVsbG93OgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ5ZWxsb3ciKTsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JCbGFjazoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYmxhY2siKTsKLSAg
ICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yQ3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1h
Z2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxv
dzsKLSAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazsKLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47Ci19Ci0KLWlubGluZSBT
dHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewot
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvckN5YW46Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImN5YW4iKTsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JNYWdlbnRhOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJtYWdlbnRhIik7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yWWVsbG93OgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ5ZWxsb3ci
KTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JCbGFjazoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYmxhY2si
KTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
clllbGxvdzsKLSAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFj
azsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47Ci19Ci0KLWlu
bGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVl
KSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JDeWFuOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJjeWFuIik7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JNYWdlbnRhOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJtYWdlbnRh
Iik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInllbGxv
dyIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImJsYWNr
Iik7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JNYWdlbnRhOwotICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclll
bGxvdzsKLSAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOwot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOwotfQotCi1pbmxpbmUg
U3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewot
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiY3lhbiIpOwotICAg
IGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yTWFnZW50YToKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgibWFnZW50YSIpOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yWWVsbG93OgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ5ZWxsb3ciKTsK
LSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJibGFjayIpOwot
ICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gImN5YW4iKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yQ3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFn
ZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c7
Ci0gICAgaWYgKHZhbHVlID09ICJibGFjayIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2Fs
bC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQotCi0r
ICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU051bWJlciAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlQ29sb3JMaXN0
OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7Ci0rICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQotCi0rICh2b2lk
KV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNO
dW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwotfQot
Ci0rICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBAKEluc3BlY3Rvcjo6
ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4ocGF5
bG9hZCkpOwotfQotCi0rICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5n
PiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNz
XSk7Ci0gICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Ci19
Ci0KLSsgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUg
PSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXls
b2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1y
ZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9u
cy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLUBpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxv
YWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2Ui
XSwgQCJtZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsK
LQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNv
ZGUiXSwgQCJjb2RlIik7Ci0gICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdl
clZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
SlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdAotewotICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W2pzb25PYmplY3QgdG9J
bnNwZWN0b3JPYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1
cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcg
KiltZXNzYWdlIGNvZGU6KGludCljb2RlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOwotCi0gICAgc2VsZi5tZXNzYWdlID0g
bWVzc2FnZTsKLSAgICBzZWxmLmNvZGUgPSBjb2RlOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0K
LS0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW3N1cGVyIHNl
dFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAoTlNTdHJpbmcgKilt
ZXNzYWdlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Ci19
Ci0KLS0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKLXsKLSAgICBbc3VwZXIgc2V0SW50ZWdlcjpj
b2RlIGZvcktleTpAImNvZGUiXTsKLX0KLQotLSAoaW50KWNvZGUKLXsKLSAgICByZXR1cm4gW3N1
cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29t
bWFuZC1zaXplcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVz
Lmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGUxY2U2MjA0ZGNj
N2E3YzdlYTVhMGQ5NjU3YTg4Mjk5ZGVjMDM2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24t
cmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTM5OCArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTog
SW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIE5ldHdvcmsxLgotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsxLmxvYWRSZXNvdXJjZTEiLCBbXSwgW10p
OwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yazEiKTsKLQotLy8gTmV0
d29yazMuCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJl
c291cmNlMSIsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0
d29yazMubG9hZFJlc291cmNlMiIsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
Q29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlMyIsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlNCIsIFtdLCBbXSk7Ci1J
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlNSIs
IFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9h
ZFJlc291cmNlNiIsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgi
TmV0d29yazMubG9hZFJlc291cmNlNyIsIFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2
YXRlRG9tYWluKCJOZXR3b3JrMyIpOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5
aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAg
IHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRp
c3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0K
LSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJu
YXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2Fs
bElkKSA9IDA7Ci19OwotY2xhc3MgQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciA6
IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB+QWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZTIobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlMyhsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U0KGxv
bmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyBjYWxs
SWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNihsb25nIGNhbGxJZCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgY2FsbElkKSA9IDA7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5n
LWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
LSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
OwotY2xhc3MgQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotY2xhc3MgTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBsb2Fk
UmVzb3VyY2UxKEVycm9yU3RyaW5nJikgPSAwOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfk5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19OwotCi1jbGFzcyBOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZTIoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMoRXJy
b3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTQoRXJyb3JTdHJp
bmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUoRXJyb3JTdHJpbmcmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYoRXJyb3JTdHJpbmcmKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcoRXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0
ZWQ6Ci0gICAgdmlydHVhbCB+TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07
Ci0KLWNsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdl
KSBvdmVycmlkZTsKLXByaXZhdGU6Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0
ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBhbHRl
cm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3Bh
dGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgot
ICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotY2xhc3MgTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
ciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBj
cmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwotcHJpdmF0ZToK
LSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgbG9h
ZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJh
bWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAg
IHZvaWQgbG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5h
dGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0
ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hl
cjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKiBt
X2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAg
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
LSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6On5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5OZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcigpIHsgfQotCi1SZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0
Y2hlciwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3Bh
dGNoZXIsIGFnZW50KSk7Ci19Ci0KLU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdl
bnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9t
YWluKEFTQ0lJTGl0ZXJhbCgiTmV0d29yazEiKSwgdGhpcyk7Ci19Ci0KLXZvaWQgTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoQVNDSUlMaXRl
cmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7Ci0KLSAgICBpZiAobWV0aG9kID09ICJsb2FkUmVz
b3VyY2UxIikKLSAgICAgICAgbG9hZFJlc291cmNlMShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1l
dGVycykpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmco
J1wnJywgIk5ldHdvcmsxIiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7Ci19Ci0K
LXZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7
Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMShyZXF1ZXN0SWQp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJv
cjsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoZXJyb3IpOwotCi0gICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLVJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyPiBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIm
IGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdl
bnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcjo6TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2Vu
ZERpc3BhdGNoZXIsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAg
ICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAg
ICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRp
c3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrMyIpLCB0aGlzKTsKLX0KLQot
dm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKLXsK
LSAgICBSZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9i
amVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsKLQotICAgIHR5cGVkZWYg
dm9pZCAoTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKTsKLSAgICB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPERpc3BhdGNoTWFwPiBkaXNwYXRjaE1hcDsKLSAgICBpZiAoZGlzcGF0Y2hNYXAu
Z2V0KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9kVGFi
bGUgewotICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKLSAgICAgICAgICAgIENhbGxIYW5k
bGVyIGhhbmRsZXI7Ci0gICAgICAgIH0gY29tbWFuZHNbXSA9IHsKLSAgICAgICAgICAgIHsgImxv
YWRSZXNvdXJjZTEiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMSB9
LAotICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMiIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UyIH0sCi0gICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2UzIiwgJk5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMgfSwKLSAgICAgICAgICAgIHsg
ImxvYWRSZXNvdXJjZTQiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
NCB9LAotICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNSIsICZOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyOjpsb2FkUmVzb3VyY2U1IH0sCi0gICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2U2Iiwg
Jk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYgfSwKLSAgICAgICAgICAg
IHsgImxvYWRSZXNvdXJjZTciLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291
cmNlNyB9LAotICAgICAgICB9OwotICAgICAgICBzaXplX3QgbGVuZ3RoID0gV1RGX0FSUkFZX0xF
TkdUSChjb21tYW5kcyk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICBkaXNwYXRjaE1hcC5nZXQoKS5hZGQoY29tbWFuZHNbaV0ubmFtZSwg
Y29tbWFuZHNbaV0uaGFuZGxlcik7Ci0gICAgfQotCi0gICAgYXV0byBmaW5kUmVzdWx0ID0gZGlz
cGF0Y2hNYXAuZ2V0KCkuZmluZChtZXRob2QpOwotICAgIGlmIChmaW5kUmVzdWx0ID09IGRpc3Bh
dGNoTWFwLmdldCgpLmVuZCgpKSB7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3Ry
aW5nKCdcJycsICJOZXR3b3JrMyIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgKCgqdGhpcykuKmZpbmRSZXN1bHQtPnZhbHVl
KShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotfQotCi12b2lkIE5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVy
bmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTEocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2Fn
ZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1v
dmUocmVzdWx0KSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShl
cnJvcikpOwotfQotCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZTIobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYpCi17Ci0jaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJj
ZTIocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJy
b3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UyKGVycm9yKTsK
LQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSk7Ci0gICAgZWxzZQotICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi12b2lkIE5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTMocmVxdWVzdElkKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBt
X2FnZW50LT5sb2FkUmVzb3VyY2UzKGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocmVzdWx0KSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92
ZShlcnJvcikpOwotfQotCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZTQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYpCi17Ci0jaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNv
dXJjZTQocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAg
RXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U0KGVycm9y
KTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSk7Ci0gICAgZWxzZQot
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi12b2lkIE5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBt
X2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTUocmVxdWVzdElkKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICBtX2FnZW50LT5sb2FkUmVzb3VyY2U1KGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3Ro
KCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IFdURk1vdmUocmVzdWx0KSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RG
TW92ZShlcnJvcikpOwotfQotCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYpCi17Ci0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRS
ZXNvdXJjZTYocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0g
ICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U2KGVy
cm9yKTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSk7Ci0gICAgZWxz
ZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwotfQotCi12b2lkIE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTcocmVxdWVzdElkKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAg
UmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U3KGVycm9yKTsKLQotICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIFdURk1vdmUocmVzdWx0KSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
V1RGTW92ZShlcnJvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIkluc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsK
LQotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIE5ldHdvcmsyIHsKLS8qIFVuaXF1ZSBsb2Fk
ZXIgaWRlbnRpZmllci4gKi8KLXR5cGVkZWYgU3RyaW5nIExvYWRlcklkOwotfSAvLyBOZXR3b3Jr
MgotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNp
emVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxl
cjsKLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI7Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi0KLWNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXIgewotcHVibGljOgotICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVn
YXRlID0gaGFuZGxlcjsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVx
dWVzdElkKSBvdmVycmlkZTsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2Nv
bE5ldHdvcmsxRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotCi0KLQotY2xhc3MgT2Jq
Q0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJu
YXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3Rv
ck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5I
YW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgbG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRlOwotcHJpdmF0
ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPj4g
bV9kZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5I
YW5kbGVyPiBfbmV0d29yazFIYW5kbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9t
YWluSGFuZGxlcj4gX25ldHdvcmszSGFuZGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVy
Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29u
dHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAg
W19uZXR3b3JrMUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19uZXR3b3JrM0hhbmRsZXIgcmVsZWFz
ZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldE5ldHdvcmsxSGFuZGxl
cjooaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAg
aWYgKGhhbmRsZXIgPT0gX25ldHdvcmsxSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
W19uZXR3b3JrMUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX25ldHdvcmsxSGFuZGxlciA9IFtoYW5k
bGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsK
LSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBbHRlcm5hdGVEaXNw
YXRjaGFibGVBZ2VudDxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyPj4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrMSIpLCAqX2NvbnRyb2xs
ZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBl
bmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFBy
b3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiluZXR3b3JrMUhhbmRsZXIKLXsKLSAgICByZXR1
cm4gX25ldHdvcmsxSGFuZGxlcjsKLX0KLQotLSAodm9pZClzZXROZXR3b3JrM0hhbmRsZXI6KGlk
PFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmICho
YW5kbGVyID09IF9uZXR3b3JrM0hhbmRsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtfbmV0
d29yazNIYW5kbGVyIHJlbGVhc2VdOwotICAgIF9uZXR3b3JrM0hhbmRsZXIgPSBbaGFuZGxlciBy
ZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1
ZTxPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Ci0gICAg
YXV0byBhbHRlcm5hdGVBZ2VudCA9IHN0ZDo6bWFrZV91bmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hh
YmxlQWdlbnQ8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcj4+KEFTQ0lJTGl0ZXJhbCgiTmV0d29yazMiKSwgKl9jb250cm9sbGVyLCBX
VEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0
cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19Ci0KLS0gKGlkPFRlc3RQcm90b2Nv
bE5ldHdvcmszRG9tYWluSGFuZGxlcj4pbmV0d29yazNIYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9u
ZXR3b3JrM0hhbmRsZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12
YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRh
aW4sIHNldHRlcj1zZXROZXR3b3JrMUhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURv
bWFpbkhhbmRsZXI+IG5ldHdvcmsxSGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRh
aW4sIHNldHRlcj1zZXROZXR3b3JrM0hhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0Rv
bWFpbkhhbmRsZXI+IG5ldHdvcmszSGFuZGxlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
cjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMVdpdGhF
cnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
a107Ci19Ci0KLQotCi0KLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXI6OmxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWQgZXJyb3JDYWxsYmFj
ayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTFXaXRo
RXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2tdOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBe
KE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBl
cnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCkpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UyV2l0aEVycm9y
Q2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsK
LX0KLQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlMyhsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0
cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3Ip
OwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAg
IH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
KTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxi
YWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0K
LXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZTQobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9Owot
Ci0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0g
ICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazpl
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi12b2lk
IE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxv
bmcgcmVxdWVzdElkKQotewotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJv
cikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAg
IGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH07
Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotdm9pZCBPYmpD
SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHJl
cXVlc3RJZCkKLXsKLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9OwotCi0g
ICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlNldpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLXZvaWQgT2JqQ0luc3Bl
Y3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0
SWQpCi17Ci0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vz
c0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfTsKLQotICAgIFtt
X2RlbGVnYXRlIGxvYWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
Ci0KLQotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNo
ZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxG
b3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sSlNPTk9iamVjdC5oPgotCi0KLQotCi0KLQotCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xO
ZXR3b3JrMURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQHJlcXVpcmVkCi0tICh2b2lkKWxvYWRS
ZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVu
ZAotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyIDxOU09iamVj
dD4KLUByZXF1aXJlZAotLSAodm9pZClsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6KHZv
aWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9p
ZCheKSgpKXN1Y2Nlc3NDYWxsYmFjazsKLS0gKHZvaWQpbG9hZFJlc291cmNlMldpdGhFcnJvckNh
bGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6KHZvaWQoXikoKSlzdWNjZXNzQ2FsbGJhY2s7Ci0tICh2b2lkKWxvYWRSZXNvdXJjZTNX
aXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKCkpc3VjY2Vzc0NhbGxiYWNrOwotLSAodm9pZClsb2Fk
UmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSgpKXN1Y2Nlc3NDYWxsYmFjazsKLS0g
KHZvaWQpbG9hZFJlc291cmNlNVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICpl
cnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoKSlzdWNjZXNzQ2Fs
bGJhY2s7Ci0tICh2b2lkKWxvYWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShO
U1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKCkp
c3VjY2Vzc0NhbGxiYWNrOwotLSAodm9pZClsb2FkUmVzb3VyY2U3V2l0aEVycm9yQ2FsbGJhY2s6
KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoo
dm9pZCheKSgpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVl
cy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlD
b252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgT2JqQ0VudW1UeXBlPgotT2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKTsKLQotCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25m
aWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zIChOZXR3b3JrMURvbWFpbikKLQotQGVuZAotQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUxvYWRl
cklkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVu
ZAotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmszRG9tYWlu
KQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMg
KE5ldHdvcmsxRG9tYWluKQotCi1AZW5kCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zIChOZXR3b3JrMkRvbWFpbikKLQotKyAodm9pZClfcGFyc2VMb2FkZXJJZDoo
TlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAg
ICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBheWxvYWQ7Ci19Ci0KLUBlbmQKLUBpbXBsZW1lbnRh
dGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmszRG9tYWluKQotCi1AZW5k
Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFs
dWVzLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwotCi0KLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJl
c3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEwNTUzYzgwZWE3NzNjYjU2YzVl
NWZjOTkyYTI2ODM4NTVjNTUzYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcz
ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIFR5cGVEb21haW4uCi1JbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiVHlwZURvbWFpbi5UeXBlRG9tYWluRW51bSIsIHtT
aGFyZWQ6ICJzaGFyZWQiLCBSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJsdWUi
fSk7Ci0KLS8vIENvbW1hbmREb21haW4uCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFu
ZCgiQ29tbWFuZERvbWFpbi5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZSIsIFtdLCBbInJldHVy
blZhbHVlIl0pOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiQ29tbWFuZERvbWFp
biIpOwotCi0vLyBFdmVudERvbWFpbi4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudERv
bWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hl
ci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJFdmVudERvbWFpbiIpOwotSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckVudW0oIkV2ZW50RG9tYWluLkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0
ZXIiLCB7U2hhcmVkOiAic2hhcmVkIiwgQmxhY2s6ICJibGFjayIsIFdoaXRlOiAid2hpdGUifSk7
Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVu
dW1QYXJhbWV0ZXIiLCBbInBhcmFtZXRlciJdKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVE
b21haW4oIkV2ZW50RG9tYWluIik7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNo
ZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlz
cGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdl
dCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5k
RGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyBjYWxs
SWQpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12
YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI7Ci0j
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLWNsYXNz
IENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIC8v
IE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncmV0dXJuVmFsdWUnIHdoaWxlIGdlbmVyYXRpbmcgY29t
bWFuZC9ldmVudCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZS4KLSAgICBlbnVtIGNsYXNzIFJl
dHVyblZhbHVlIHsKLSAgICAgICAgU2hhcmVkID0gMCwKLSAgICAgICAgQ3lhbiA9IDYsCi0gICAg
ICAgIE1hZ2VudGEgPSA3LAotICAgICAgICBZZWxsb3cgPSA4LAotICAgIH07IC8vIGVudW0gY2xh
c3MgUmV0dXJuVmFsdWUKLSAgICB2aXJ0dWFsIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFs
dWUoRXJyb3JTdHJpbmcmLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpS
ZXR1cm5WYWx1ZSogb3V0X3JldHVyblZhbHVlKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVh
bCB+Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLQotY2xhc3Mg
Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRh
bEJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1l
c3NhZ2UpIG92ZXJyaWRlOwotcHJpdmF0ZToKLSAgICB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVy
blZhbHVlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRl
cnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGlj
OgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVDb21tYW5kRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51
bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBDb21tYW5kRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKik7Ci0gICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9h
Z2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVu
ZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oIgotCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0j
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkNvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KLQotUmVmPENvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlcj4gQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2Vu
ZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21tYW5k
RG9tYWluQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0K
LUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgQ29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50YWxCYWNr
ZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdlbnQpCi17
Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFT
Q0lJTGl0ZXJhbCgiQ29tbWFuZERvbWFpbiIpLCB0aGlzKTsKLX0KLQotdm9pZCBDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3Qo
QVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7Ci0KLSAgICBpZiAobWV0aG9kID09
ICJjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZSIpCi0gICAgICAgIGNvbW1hbmRXaXRoRW51bVJl
dHVyblZhbHVlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiQ29tbWFuZERvbWFpbiIs
ICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOwotfQotCi12b2lkIENvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1
ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikg
ewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmNvbW1hbmRXaXRoRW51bVJldHVyblZh
bHVlKHJlcXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVy
cm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6UmV0dXJuVmFsdWUgb3V0X3JldHVyblZhbHVlOwotICAgIG1fYWdlbnQtPmNvbW1h
bmRXaXRoRW51bVJldHVyblZhbHVlKGVycm9yLCAmb3V0X3JldHVyblZhbHVlKTsKLQotICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgicmV0dXJuVmFsdWUiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVu
dW1Db25zdGFudFZhbHVlKG91dF9yZXR1cm5WYWx1ZSkpOwotCi0gICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgV1RGTW92ZShyZXN1bHQpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBX
VEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJv
dXRlcjsKLQotY2xhc3MgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXIgewotcHVibGljOgot
ICAgIEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVu
ZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICAgICAg
Ly8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwYXJhbWV0ZXInIHdoaWxlIGdlbmVyYXRpbmcgY29t
bWFuZC9ldmVudCBldmVudFdpdGhFbnVtUGFyYW1ldGVyLgotICAgICAgICBlbnVtIGNsYXNzIFBh
cmFtZXRlciB7Ci0gICAgICAgICAgICBTaGFyZWQgPSAwLAotICAgICAgICAgICAgQmxhY2sgPSA0
LAotICAgICAgICAgICAgV2hpdGUgPSA1LAotICAgICAgICB9OyAvLyBlbnVtIGNsYXNzIFBhcmFt
ZXRlcgotICAgIHZvaWQgZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1ldGVy
KTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3Bw
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIklu
c3BlY3RvckZyb250ZW5kUm91dGVyLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0
Y2hlcjo6ZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1ldGVyKQotewotICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiks
IEFTQ0lJTGl0ZXJhbCgiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciIpKTsKLSAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicGFyYW1l
dGVyIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRW
YWx1ZShwYXJhbWV0ZXIpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgicGFyYW1zIiksIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0KLSAgICBtX2Zyb250ZW5kUm91
dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29s
IHsKLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2UgVHlwZURvbWFpbiB7Ci1l
bnVtIGNsYXNzIFR5cGVEb21haW5FbnVtOwotfSAvLyBUeXBlRG9tYWluCi0vLyBFbmQgb2YgZm9y
d2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0
cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1
cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotbmFtZXNwYWNlIFR5cGVEb21haW4gewot
LyogICovCi1lbnVtIGNsYXNzIFR5cGVEb21haW5FbnVtIHsKLSAgICBTaGFyZWQgPSAwLAotICAg
IFJlZCA9IDEsCi0gICAgR3JlZW4gPSAyLAotICAgIEJsdWUgPSAzLAotfTsgLy8gZW51bSBjbGFz
cyBUeXBlRG9tYWluRW51bQotfSAvLyBUeXBlRG9tYWluCi0KLQotCi1uYW1lc3BhY2UgVGVzdEhl
bHBlcnMgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgotc3RkOjpvcHRp
b25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3Ry
aW5nJik7Ci0KLS8vIEVudW1zIGluIHRoZSAnVHlwZURvbWFpbicgRG9tYWluCi10ZW1wbGF0ZTw+
Ci1zdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21h
aW5FbnVtPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlw
ZURvbWFpbjo6VHlwZURvbWFpbkVudW0+KGNvbnN0IFN0cmluZyYpOwotCi19IC8vIG5hbWVzcGFj
ZSBUZXN0SGVscGVycwotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQ
cm90b2NvbCB7Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewotICAgICJzaGFyZWQiLAotICAgICJy
ZWQiLAotICAgICJncmVlbiIsCi0gICAgImJsdWUiLAotICAgICJibGFjayIsCi0gICAgIndoaXRl
IiwKLSAgICAiY3lhbiIsCi0gICAgIm1hZ2VudGEiLAotICAgICJ5ZWxsb3ciLAotfTsKLQotU3Ry
aW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29u
c3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0aGUgJ1R5cGVEb21haW4nIERv
bWFpbgotdGVtcGxhdGU8Pgotc3RkOjpvcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBl
RG9tYWluOjpUeXBlRG9tYWluRW51bT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPihjb25zdCBTdHJpbmcmIHBy
b3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNb
XSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpU
eXBlRG9tYWluRW51bTo6U2hhcmVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpSZWQsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OkdyZWVuLAotICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5F
bnVtOjpCbHVlLAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCi0g
ICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFu
dFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5
cGVEb21haW46OlR5cGVEb21haW5FbnVtKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQot
fSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJv
dG9jb2wgVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi0KLQotCi1jbGFzcyBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxl
cj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZpcnR1YWwgdm9pZCBj
b21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7Ci1wcml2
YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFu
ZGxlcj4+IG1fZGVsZWdhdGU7Ci19OwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2Nv
bnRyb2xsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+
IF9jb21tYW5kRG9tYWluSGFuZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFp
bkV2ZW50RGlzcGF0Y2hlciAqX2V2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyOwotfQotCi0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICgh
c2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAg
X2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lk
KWRlYWxsb2MKLXsKLSAgICBbX2NvbW1hbmREb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIFtf
ZXZlbnREb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2Nd
OwotfQotCi0tICh2b2lkKXNldENvbW1hbmREb21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xD
b21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09
IF9jb21tYW5kRG9tYWluSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW19jb21tYW5k
RG9tYWluSGFuZGxlciByZWxlYXNlXTsKLSAgICBfY29tbWFuZERvbWFpbkhhbmRsZXIgPSBbaGFu
ZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gc3RkOjptYWtl
X3VuaXF1ZTxPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5k
bGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudDxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVy
bmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KEFTQ0lJTGl0ZXJhbCgiQ29tbWFu
ZERvbWFpbiIpLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwot
ICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQp
KTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+KWNv
bW1hbmREb21haW5IYW5kbGVyCi17Ci0gICAgcmV0dXJuIF9jb21tYW5kRG9tYWluSGFuZGxlcjsK
LX0KLQotLSAoVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKill
dmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcgotewotICAgIGlmICghX2V2ZW50RG9tYWluRXZlbnRE
aXNwYXRjaGVyKQotICAgICAgICBfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQ
cm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENv
bnRyb2xsZXI6X2NvbnRyb2xsZXJdOwotICAgIHJldHVybiBfZXZlbnREb21haW5FdmVudERpc3Bh
dGNoZXI7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1A
cHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0Q29tbWFuZERvbWFpbkhhbmRs
ZXI6KSBpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gY29tbWFuZERv
bWFpbkhhbmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2Nv
bEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpldmVudERvbWFpbkV2ZW50RGlzcGF0
Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi12b2lkIE9iakNJbnNwZWN0b3JDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVx
dWVzdElkKQotewotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1
Y2Nlc3NDYWxsYmFjayA9IF4oVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51
bVJldHVyblZhbHVlUmV0dXJuVmFsdWUgcmV0dXJuVmFsdWUpIHsKLSAgICAgICAgUmVmPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJyZXR1cm5WYWx1ZSIp
LCB0b1Byb3RvY29sU3RyaW5nKHJldHVyblZhbHVlKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSk7Ci0g
ICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVy
cm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
XTsKLX0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7Ci0KLQotCi0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbEV2ZW50RG9t
YWluRG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwotewotICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmls
OwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZXZlbnRXaXRoRW51bVBhcmFtZXRlcldp
dGhQYXJhbWV0ZXI6KFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51bVBhcmFtZXRl
clBhcmFtZXRlcilwYXJhbWV0ZXIKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVy
ID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBSZWY8SW5zcGVjdG9yT2Jq
ZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1l
c3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIkV2
ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiKSk7Ci0gICAgUmVmPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJh
bXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInBhcmFtZXRlciIpLCB0b1Byb3RvY29s
U3RyaW5nKHBhcmFtZXRlcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRl
cmFsKCJwYXJhbXMiKSwgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKLSAgICByb3V0ZXIuc2VuZEV2
ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12
YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0lu
dGVnZXIsIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtKSB7Ci0gICAgVGVzdFByb3RvY29sVHlw
ZURvbWFpbkVudW1TaGFyZWQsCi0gICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1SZWQsCi0g
ICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1HcmVlbiwKLSAgICBUZXN0UHJvdG9jb2xUeXBl
RG9tYWluRW51bUJsdWUsCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJv
dG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSkg
ewotICAgIFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1
ZVJldHVyblZhbHVlU2hhcmVkLAotICAgIFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5k
V2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlQ3lhbiwKLSAgICBUZXN0UHJvdG9jb2xDb21t
YW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZU1hZ2VudGEsCi0g
ICAgVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0
dXJuVmFsdWVZZWxsb3csCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJv
dG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIpIHsKLSAgICBU
ZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXJTaGFy
ZWQsCi0gICAgVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFy
YW1ldGVyQmxhY2ssCi0gICAgVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFy
YW1ldGVyUGFyYW1ldGVyV2hpdGUsCi19OwotCi0KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbENv
bW1hbmREb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUByZXF1aXJlZAotLSAodm9pZClj
b21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3Ry
aW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoVGVzdFBy
b3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWUg
cmV0dXJuVmFsdWUpKXN1Y2Nlc3NDYWxsYmFjazsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbEV2ZW50RG9tYWlu
RG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKLS0gKHZvaWQpZXZlbnRXaXRoRW51bVBh
cmFtZXRlcldpdGhQYXJhbWV0ZXI6KFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51
bVBhcmFtZXRlclBhcmFtZXRlcilwYXJhbWV0ZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQotQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVl
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJy
YXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgT2JqQ0VudW1UeXBlPgotT2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKTsKLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVz
dFByb3RvY29sVHlwZURvbWFpbkVudW0gdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0g
ICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZDoKLSAgICAgICAgcmV0dXJu
IEFTQ0lJTGl0ZXJhbCgic2hhcmVkIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWlu
RW51bVJlZDoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgicmVkIik7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUdyZWVuOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRl
cmFsKCJncmVlbiIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVlOgot
ICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJibHVlIik7Ci0gICAgfQotfQotCi10ZW1wbGF0
ZTw+Ci1pbmxpbmUgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJzaGFyZWQiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1TaGFyZWQ7Ci0gICAgaWYgKHZh
bHVlID09ICJyZWQiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1S
ZWQ7Ci0gICAgaWYgKHZhbHVlID09ICJncmVlbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xUeXBlRG9tYWluRW51bUdyZWVuOwotICAgIGlmICh2YWx1ZSA9PSAiYmx1ZSIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUJsdWU7Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkOwot
fQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xDb21tYW5k
RG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSB2YWx1ZSkKLXsKLSAg
ICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Db21t
YW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlU2hhcmVkOgotICAgICAgICByZXR1cm4g
QVNDSUlMaXRlcmFsKCJzaGFyZWQiKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbENvbW1hbmREb21h
aW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlQ3lhbjoKLSAgICAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgiY3lhbiIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sQ29tbWFuZERv
bWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWVNYWdlbnRhOgotICAgICAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsKCJtYWdlbnRhIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xD
b21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZVllbGxvdzoK
LSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgieWVsbG93Iik7Ci0gICAgfQotfQotCi10ZW1w
bGF0ZTw+Ci1pbmxpbmUgVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJl
dHVyblZhbHVlUmV0dXJuVmFsdWUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJzaGFyZWQiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWVT
aGFyZWQ7Ci0gICAgaWYgKHZhbHVlID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlQ3lh
bjsKLSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWVNYWdl
bnRhOwotICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlWWVs
bG93OwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBUZXN0UHJvdG9jb2xD
b21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZVNoYXJlZDsK
LX0KLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRXZlbnRE
b21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyIHZhbHVlKQotewotICAgIHN3aXRj
aCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVt
UGFyYW1ldGVyUGFyYW1ldGVyU2hhcmVkOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJz
aGFyZWQiKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51bVBh
cmFtZXRlclBhcmFtZXRlckJsYWNrOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJibGFj
ayIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1l
dGVyUGFyYW1ldGVyV2hpdGU6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIndoaXRlIik7
Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgVGVzdFByb3RvY29sRXZlbnREb21haW5F
dmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAic2hhcmVkIikKLSAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRl
clNoYXJlZDsKLSAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlckJsYWNrOwot
ICAgIGlmICh2YWx1ZSA9PSAid2hpdGUiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRXZl
bnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyV2hpdGU7Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRX
aXRoRW51bVBhcmFtZXRlclBhcmFtZXRlclNoYXJlZDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVHlw
ZURvbWFpbkRvbWFpbikKLQotKyAodm9pZClfcGFyc2VUeXBlRG9tYWluRW51bTooTlNOdW1iZXIg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLUBpbnRlcmZhY2Ug
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChDb21tYW5kRG9tYWluRG9tYWluKQotCi1AZW5k
Ci1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRXZlbnREb21haW5Eb21h
aW4pCi0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoVHlwZURvbWFpbkRvbWFpbikKLQotKyAodm9pZClfcGFyc2VUeXBlRG9tYWluRW51bTooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgICpv
dXRWYWx1ZSA9IEAoSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVHlw
ZURvbWFpbkVudW0+KHBheWxvYWQpKTsKLX0KLQotQGVuZAotQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucyAoQ29tbWFuZERvbWFpbkRvbWFpbikKLQotQGVuZAotQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRXZlbnREb21haW5Eb21h
aW4pCi0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW1w
b3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0K
LQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRo
LW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGMzMWQ2ODRjZTMyMGJmNzU0ZTZhNmFjNzM3N2UxN2FjMTdkNWNjZjQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFs
LXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMTgzICswLDAgQEAK
LSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRGF0YWJh
c2UuCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGF0YWJhc2VEaXNwYXRjaGVyID0gSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5k
LCAiRGF0YWJhc2UiKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRGF0YWJhc2Uu
ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAi
dGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9y
IiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOwotSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckV2ZW50KCJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiLCBb
ImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIs
ICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xv
ciJdKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIik7Ci0jIyMg
RW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQ
dHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVy
ID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5k
RGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0K
LXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRj
aGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5j
cHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLWNs
YXNzIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBEYXRhYmFzZUZy
b250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9u
dGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9Ci0gICAgdm9pZCBkaWRFeGVjdXRlT3B0aW9u
YWxQYXJhbWV0ZXJzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBj
b2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25zdCBub3RlcywgY29uc3QgZG91YmxlKiBjb25z
dCB0aW1lc3RhbXAsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBjb25zdCBzY3JlZW5Db2xvciwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNv
bG9ycywgY29uc3QgU3RyaW5nKiBjb25zdCBwcmludENvbG9yKTsKLSAgICB2b2lkIGRpZEV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3Rh
bXAsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzJiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3Ry
aW5nJiBwcmludENvbG9yKTsKLXByaXZhdGU6Ci0gICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRl
bmRSb3V0ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRz
LXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi12b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQ
YXJhbWV0ZXJzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25zdCBub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCB0
aW1lc3RhbXAsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBjb25zdCBzY3JlZW5Db2xvciwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9y
cywgY29uc3QgU3RyaW5nKiBjb25zdCBwcmludENvbG9yKQotewotICAgIFJlZjxJbnNwZWN0b3JP
YmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29u
TWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgi
RGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIpKTsKLSAgICBSZWY8SW5zcGVj
dG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheShBU0NJSUxp
dGVyYWwoImNvbHVtbk5hbWVzIiksIGNvbHVtbk5hbWVzKTsKLSAgICBpZiAobm90ZXMpCi0gICAg
ICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgKm5vdGVz
KTsKLSAgICBpZiAodGltZXN0YW1wKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZShB
U0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCAqdGltZXN0YW1wKTsKLSAgICBpZiAodmFsdWVzKQot
ICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCB2
YWx1ZXMpOwotICAgIGlmIChwYXlsb2FkKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVl
KEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCAqcGF5bG9hZCk7Ci0gICAgaWYgKHNxbEVycm9yKQot
ICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiks
IHNxbEVycm9yKTsKLSAgICBpZiAoc2NyZWVuQ29sb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+
c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgKnNjcmVlbkNvbG9yKTsKLSAg
ICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KEFT
Q0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIGFsdGVybmF0ZUNvbG9ycyk7Ci0gICAgaWYg
KHByaW50Q29sb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgicHJpbnRDb2xvciIpLCAqcHJpbnRDb2xvcik7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVj
dChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwotCi0gICAg
bV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
LX0KLQotdm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBj
b2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnMmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50
Q29sb3IpCi17Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnMiKSk7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KEFT
Q0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOwotICAgIHBhcmFtc09iamVj
dC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbm90ZXMpOwotICAgIHBhcmFtc09i
amVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHRpbWVzdGFtcCk7Ci0g
ICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWVz
KTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBw
YXlsb2FkKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVy
cm9yIiksIHNxbEVycm9yKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoInNjcmVlbkNvbG9yIiksIHNjcmVlbkNvbG9yKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldEFy
cmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIGFsdGVybmF0ZUNvbG9ycyk7Ci0g
ICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIHBy
aW50Q29sb3IpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJh
bXMiKSwgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKLQotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2Vu
ZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVz
cGFjZSBQcm90b2NvbCB7Ci0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIERh
dGFiYXNlIHsKLWNsYXNzIEVycm9yOwotfSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIGZvcndhcmQg
ZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLS8q
IFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KLXR5cGVkZWYgU3RyaW5n
IERhdGFiYXNlSWQ7Ci10eXBlZGVmIFN0cmluZyBQcmltYXJ5Q29sb3JzOwotdHlwZWRlZiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycz4gQ29sb3JMaXN0OwotfSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIHR5cGVkZWZz
LgotCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBF
cnJvciA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgewotcHVibGljOgot
ICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE1lc3NhZ2VTZXQg
PSAxIDw8IDAsCi0gICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxkc1Nl
dCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNU
QVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsK
LSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0luc3BlY3Rvck9iamVj
dD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZnJpZW5kIGNsYXNzIEVycm9yOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9w
ZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJtZXNzYWdlIiksIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImNv
ZGUiKSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0g
c2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAg
ICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigm
cmVzdWx0KSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6Ci0gICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkK
LSAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0g
ICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBEYXRhYmFz
ZQotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25h
bC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
IgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4K
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZl
bnREaXNwYXRjaGVyICpfZGF0YWJhc2VFdmVudERpc3BhdGNoZXI7Ci19Ci0KLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciop
Y29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQot
ICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJv
bGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxv
YwotewotICAgIFtfZGF0YWJhc2VFdmVudERpc3BhdGNoZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVy
IGRlYWxsb2NdOwotfQotCi0tIChUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0
Y2hlciAqKWRhdGFiYXNlRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgaWYgKCFfZGF0YWJhc2VFdmVu
dERpc3BhdGNoZXIpCi0gICAgICAgIF9kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFBy
b3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJv
bGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcjsK
LX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVy
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24g
OiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xE
YXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZGF0YWJhc2VFdmVudERpc3BhdGNoZXI7Ci1A
ZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgot
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JW
YWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
bW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJh
bWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNo
ZXIKLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsK
LSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xs
ZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0K
LQotLSAodm9pZClkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5v
dGVzIHRpbWVzdGFtcDooZG91YmxlICopdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopcGF5bG9h
ZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5D
b2xvcjooTlNTdHJpbmcgKiopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5nICoqKXBy
aW50Q29sb3IKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xs
ZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZh
bHVlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihw
YXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05B
TF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc2NyZWVuQ29sb3IsIEAic2NyZWVuQ29sb3IiKTsK
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRl
Q29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUihwcmludENvbG9yLCBAInByaW50Q29sb3IiKTsKLQotICAgIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFT
Q0lJTGl0ZXJhbCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIpKTsKLSAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgIGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRB
cnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KCgq
Y29sdW1uTmFtZXMpKSk7Ci0gICAgaWYgKG5vdGVzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNl
dFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksICgqbm90ZXMpKTsKLSAgICBpZiAodGltZXN0
YW1wKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVz
dGFtcCIpLCAoKnRpbWVzdGFtcCkpOwotICAgIGlmICh2YWx1ZXMpCi0gICAgICAgIHBhcmFtc09i
amVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIFsoKnZhbHVlcykgdG9JbnNw
ZWN0b3JPYmplY3RdKTsKLSAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5z
ZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgWygqcGF5bG9hZCkgdG9JbnNwZWN0b3JP
YmplY3RdKTsKLSAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2Jq
ZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgWygqc3FsRXJyb3IpIHRvSW5zcGVjdG9yT2Jq
ZWN0XSk7Ci0gICAgaWYgKHNjcmVlbkNvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksICgqc2NyZWVuQ29sb3IpKTsKLSAgICBp
ZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KEFTQ0lJ
TGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KCgqYWx0ZXJu
YXRlQ29sb3JzKSkpOwotICAgIGlmIChwcmludENvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgKCpwcmludENvbG9yKSk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBXVEZNb3Zl
KHBhcmFtc09iamVjdCkpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKLX0KLQotLSAodm9pZClkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNX
aXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVz
OihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKilwYXlsb2FkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopc3FsRXJy
b3Igc2NyZWVuQ29sb3I6KE5TU3RyaW5nICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJp
bmcgKilwcmludENvbG9yCi17Ci0gICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9j
b250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMi
KTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBA
InBheWxvYWQiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihz
cWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKHNjcmVlbkNvbG9yLCBAInNjcmVlbkNvbG9yIik7Ci0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNv
bG9ycyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHByaW50
Q29sb3IsIEAicHJpbnRDb2xvciIpOwotCi0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJEYXRhYmFzZS5kaWRF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKSk7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJhbXNPYmpl
Y3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgaW5zcGVjdG9yU3RyaW5n
QXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxp
dGVyYWwoIm5vdGVzIiksIG5vdGVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZShBU0NJ
SUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOwotICAgIHBhcmFtc09iamVjdC0+c2V0
T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIFt2YWx1ZXMgdG9JbnNwZWN0b3JPYmplY3Rd
KTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBb
cGF5bG9hZCB0b0luc3BlY3Rvck9iamVjdF0pOwotICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0
KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgW3NxbEVycm9yIHRvSW5zcGVjdG9yT2JqZWN0XSk7
Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIp
LCBzY3JlZW5Db2xvcik7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwo
ImFsdGVybmF0ZUNvbG9ycyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMp
KTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3Ii
KSwgcHJpbnRDb2xvcik7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwo
InBhcmFtcyIpLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwotICAgIHJvdXRlci5zZW5kRXZlbnQo
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0
aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xhc3MgVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvcjsKLQotCi0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBS
V0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5T
RGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihp
bnQpY29kZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0
cmluZyAqbWVzc2FnZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3Np
Z24pIGludCBjb2RlOwotQGVuZAotCi0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNw
YXRjaGVyIDogTlNPYmplY3QKLS0gKHZvaWQpZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVyc1dp
dGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVz
OihOU1N0cmluZyAqKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICoqKXBheWxvYWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiop
c3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5TU3RyaW5nICoqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNv
bG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9y
OihOU1N0cmluZyAqKilwcmludENvbG9yOwotLSAodm9pZClkaWRFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5h
bWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2
YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilwYXlsb2FkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5TU3RyaW5nICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRl
Q29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xv
cjooTlNTdHJpbmcgKilwcmludENvbG9yOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0
ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJp
dmF0ZSkKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVn
bWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PYmpD
RW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi0KLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9w
dGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRl
cmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAo
dm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNTdHJpbmcgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUNvbG9yTGlzdDoo
TlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OwotKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAodm9pZClf
cGFyc2VEYXRhYmFzZUlkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3Ry
aW5nIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsKLX0KLQot
KyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5
bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5
bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0cmluZz4qLyBjbGFzc10p
OwotICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2FkOwotfQot
Ci0rICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0g
W1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9h
ZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JWYWx1ZXMuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsK
LSAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOwotCi0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsK
LSAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0u
Z2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZToo
aW50KWNvZGUKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVz
c2FnZSwgQCJtZXNzYWdlIik7Ci0KLSAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIHNl
bGYuY29kZSA9IGNvZGU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRNZXNz
YWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2Ug
Zm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tIChOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBy
ZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAodm9pZClzZXRD
b2RlOihpbnQpY29kZQotewotICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29k
ZSJdOwotfQotCi0tIChpbnQpY29kZQotewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktl
eTpAImNvZGUiXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1hdmFpbGFiaWxpdHkuanNvbi1lcnJvciBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9m
YWlsLW9uLWRvbWFpbi1hdmFpbGFiaWxpdHkuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOTBkNzE5NWQ2YWQzNmEwZDZiZjdhN2FiYzc0MTc2YzBmMjg2MGZjYi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4t
YXZhaWxhYmlsaXR5Lmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJP
UjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBhdmFpbGFiaWxpdHkgaXMgYW4gdW5z
dXBwb3J0ZWQgc3RyaW5nLiBXYXM6ICJ3ZWJiIiwgQWxsb3dlZCB2YWx1ZXM6IHdlYgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbi1l
cnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24t
ZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNzU2ZGUzMjUwNTBjMzNhNDky
Y2Q1MGQ5ZWFkZjQyMzAzNWI2MTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMu
anNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQg
ZG9tYWluIHNwZWNpZmljYXRpb246IGNhbGwgcGFyYW1ldGVyIGxpc3QgZm9yIGNvbW1hbmQgcHJv
Y2Vzc1BvaW50cyBoYXMgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwt
b24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Zh
aWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9y
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTE0OGZmNjdjOTYwOTQ4OGE4MGU2ZmEy
NWQzYmZhNzc4ZjVkYTBhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNv
bi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9t
YWluIHNwZWNpZmljYXRpb246IHJldHVybiBwYXJhbWV0ZXIgbGlzdCBmb3IgY29tbWFuZCBwcm9j
ZXNzUG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBs
aWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGM3MWJiZDIxYzJjZjBjM2IwMzgwMWQ5NjM3YTRlNmQwZmMyNWFjNDQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGlj
YXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEg
KzAsMCBAQAotRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogcGFyYW1ldGVy
IGxpc3QgZm9yIGV2ZW50IHByb2Nlc3NlZFBvaW50cyBoYXMgZHVwbGljYXRlIHBhcmFtZXRlciBu
YW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24t
ZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvcgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ3Y2RmOGUyOGU4NTY2MTBhMjZmODE1NDk0M2Yz
NmNmOGI3ZDFmNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvcgorKysgL2Rldi9u
dWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBEdXBsaWNhdGUgdHlwZSBkZWNsYXJhdGlvbjogUnVu
dGltZS5SZW1vdGVPYmplY3RJZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVt
YmVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMu
anNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUzNzZhNzdhNDU1ZmQx
NWY2N2Q4YmNiOTM1YTZiYTQzOGMwYTU0Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbi1l
cnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWlu
IHNwZWNpZmljYXRpb246IHR5cGUgZGVjbGFyYXRpb24gZm9yIFBvaW50IGhhcyBkdXBsaWNhdGUg
bWVtYmVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24t
ZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDI2NTVjMmI5MDdlMDJlM2U4NGNiM2Y2NmZhMWY1OGUxM2Q5Yjdi
NTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24t
ZW51bS13aXRoLW5vLXZhbHVlcy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBA
QAotRVJST1I6IFR5cGUgcmVmZXJlbmNlIHdpdGggZW51bSB2YWx1ZXMgbXVzdCBoYXZlIGF0IGxl
YXN0IG9uZSBlbnVtIHZhbHVlLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlv
bmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9u
YWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOTdiMmFmMGU0N2U5M2Y4MDQ5Nzk0NDQ3MjU3ZGYzMjcyM2YwNjgyNC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0
aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAg
QEAKLUVSUk9SOiBUaGUgJ29wdGlvbmFsJyBmbGFnIGZvciBhIHBhcmFtZXRlciBtdXN0IGJlIGEg
Ym9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFs
LXR5cGUtbWVtYmVyLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlw
ZS1tZW1iZXIuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZkZjM3
NTBjMWE3Nzk3ODkzY2JmYjdlMjg3NmQ5MmNjZWNjMmY5MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlw
ZS1tZW1iZXIuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBU
aGUgJ29wdGlvbmFsJyBmbGFnIGZvciBhIHR5cGUgbWVtYmVyIG11c3QgYmUgYSBib29sZWFuIGxp
dGVyYWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVy
LWZsYWcuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXIt
ZmxhZy5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2IyYWYwZTQ3
ZTkzZjgwNDk3OTQ0NDcyNTdkZjMyNzIzZjA2ODI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0
ZXItZmxhZy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFRo
ZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgcGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVy
YWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIu
anNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29u
LWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmRmMzc1MGMxYTc3OTc4OTNj
YmZiN2UyODc2ZDkyY2NlY2MyZjkxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29u
LWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFRoZSAnb3B0aW9uYWwn
IGZsYWcgZm9yIGEgdHlwZSBtZW1iZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1l
cnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1l
cnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJmNTc1M2E0Mzk2MTQ0ZWI1NjZj
NWM1OTY4ZDA0OWFlYzYxODJkYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpz
b24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogVHlwZSByZWZlcmVu
Y2UgY2Fubm90IGhhdmUgYm90aCAndHlwZScgYW5kICckcmVmJyBrZXlzLgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Zh
aWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbi1lcnJvciBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGQ3NmJjMWM3NzczYWEwZGE5ODg0OWM5M2MzNGMzOTJmMTYyNzYz
OTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24t
dHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbi1lcnJvcgorKysgL2Rldi9udWxs
CkBAIC0xICswLDAgQEAKLUVSUk9SOiBUeXBlIHJlZmVyZW5jZSAnRGF0YWJhc2VJZCcgaXMgbm90
IGEgcHJpbWl0aXZlIHR5cGUuIEFsbG93ZWQgdmFsdWVzOiBpbnRlZ2VyLCBudW1iZXIsIHN0cmlu
ZywgYm9vbGVhbiwgZW51bSwgb2JqZWN0LCBhcnJheSwgYW55CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10
eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1sb3dl
cmNhc2UtbmFtZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTQ2
MjI1MGMwYWY4MGExNzllMDZhYWY0NWQyMWViNTQ2ZGI4ODE0Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFt
ZS5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFR5cGVzIG11
c3QgYmVnaW4gd2l0aCBhbiB1cHBlcmNhc2UgY2hhcmFjdGVyLgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24t
dW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24tZXJyb3IgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJv
cgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQzOGU2NDY3NWRhNWFlNWMyNjNkNTQ2
ZTg1MzRiNDlmM2I1ZTljOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24u
anNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBUeXBlIHJlZmVy
ZW5jZSAnZHJhZ29uJyBpcyBub3QgYSBwcmltaXRpdmUgdHlwZS4gQWxsb3dlZCB2YWx1ZXM6IGlu
dGVnZXIsIG51bWJlciwgc3RyaW5nLCBib29sZWFuLCBlbnVtLCBvYmplY3QsIGFycmF5LCBhbnkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIu
anNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIu
anNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFmNjY3MmNiZWYwOTYz
MGZkOWJlOGZmYWRhY2UxMmM1NjExY2NhOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVt
YmVyLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogTG9va3Vw
IGZhaWxlZCBmb3IgdHlwZSByZWZlcmVuY2U6IENvbG9yIChyZWZlcmVuY2VkIGZyb20gZG9tYWlu
OiBGYW50YXN5KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJk
cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1y
ZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NDY2NmQyY2Q5ZDBhNzhiMzc1
MjdkNmM2ODZjNGZiY2Y5MTAxOTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3Vs
dAorKysgL2Rldi9udWxsCkBAIC0xLDEyMzEgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIE5ldHdvcmsxLgotSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsxLmxvYWRSZXNvdXJjZSIsIFtdLCBbXSk7Ci1J
bnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMSIpOwotCi0vLyBOZXR3b3Jr
My4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJOZXR3b3JrM0Rpc3BhdGNoZXIgPSBJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQs
ICJOZXR3b3JrMyIpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJOZXR3b3JrMy5y
ZXNvdXJjZUxvYWRlZCIsIFtdKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5l
dHdvcmszIik7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUt
Z3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNs
YXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJh
Y2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7
IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5k
RGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFO
RFMpCi1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5h
dGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZShsb25nIGNhbGxJZCkgPSAwOwotfTsKLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09N
TUFORFMpCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9t
YWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLWNs
YXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI7Ci0jZW5kaWYgLy8gUExBVEZP
Uk0oV0VCX0NPTU1BTkRTKQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotCi0jaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotY2xhc3MgTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBsb2Fk
UmVzb3VyY2UoRXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+TmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0jZW5kaWYgLy8gUExBVEZPUk0o
V0VCX0NPTU1BTkRTKQotCi0jaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotY2xhc3MgTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwotcHJp
dmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIo
QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikg
eyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRl
OgotICAgIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0ZToKLSAgICBOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKLSAgICBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2Vu
dCB7IG51bGxwdHIgfTsKLX07Ci0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgiCi0KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci0jaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6On5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotI2VuZGlmIC8v
IFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLQotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLVJl
ZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpj
cmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0K
LQotTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihC
YWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVy
KGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJO
ZXR3b3JrMSIpLCB0aGlzKTsKLX0KLQotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpk
aXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0
b3JPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
cj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0
ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJh
bWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZSIpCi0gICAgICAgIGxv
YWRSZXNvdXJjZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIk5ldHdvcmsxIiwgJy4n
LCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7Ci19Ci0KLXZvaWQgTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5s
b2FkUmVzb3VyY2UoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1
bHQpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7
Ci19Ci0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi0jaWYg
UExBVEZPUk0oV0VCX0VWRU5UUykKLWNsYXNzIE5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVyIHsK
LXB1YmxpYzoKLSAgICBOZXR3b3JrM0Zyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYg
ZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9Ci0g
ICAgdm9pZCByZXNvdXJjZUxvYWRlZCgpOwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYg
bV9mcm9udGVuZFJvdXRlcjsKLX07Ci0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX0VWRU5UUykKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1m
ZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oIgotCi0jaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0jaWYgUExB
VEZPUk0oV0VCX0VWRU5UUykKLXZvaWQgTmV0d29yazNGcm9udGVuZERpc3BhdGNoZXI6OnJlc291
cmNlTG9hZGVkKCkKLXsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIk5ldHdvcmszLnJlc291cmNlTG9hZGVk
IikpOwotCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKLX0KLSNlbmRpZiAvLyBQTEFURk9STShXRUJfRVZFTlRTKQotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1
YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMu
aD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgot
I2lmIFBMQVRGT1JNKFdFQl9UWVBFUykKLW5hbWVzcGFjZSBOZXR3b3JrMiB7Ci1jbGFzcyBOZXR3
b3JrRXJyb3I7Ci19IC8vIE5ldHdvcmsyCi0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX1RZUEVTKQot
Ly8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLQotCi0jaWYgUExBVEZPUk0oV0VC
X1RZUEVTKQotbmFtZXNwYWNlIE5ldHdvcmsyIHsKLWNsYXNzIE5ldHdvcmtFcnJvciA6IHB1Ymxp
YyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0gewot
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCi0g
ICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdl
U2V0IHwgQ29kZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAgIGNs
YXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEJ1aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9yKi9JbnNwZWN0b3JPYmplY3Q+JiYg
b2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVu
ZCBjbGFzcyBOZXR3b3JrRXJyb3I7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHBy
b3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxT
VEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVh
ZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgi
Y29kZSIpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8TmV0d29ya0Vycm9yPiByZWxlYXNlKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihO
ZXR3b3JrRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0K
LSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVh
c2VOb25OdWxsKCk7Ci0gICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2Fz
dDxSZWY8TmV0d29ya0Vycm9yPio+KCZyZXN1bHQpKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8TmV0d29ya0Vy
cm9yPiByZXN1bHQgPSBOZXR3b3JrRXJyb3I6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRNZXNz
YWdlKC4uLikKLSAgICAgKiAgICAgLnNldENvZGUoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgp
OwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLX0gLy8gTmV0d29yazIKLSNlbmRpZiAvLyBQTEFURk9S
TShXRUJfVFlQRVMpCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2Vu
ZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KLQotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcjsKLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKLWNs
YXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGlj
IEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIE9iakNJ
bnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsx
RG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZp
cnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRlOwotcHJpdmF0
ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPj4g
bV9kZWxlZ2F0ZTsKLX07Ci0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotCi0KLQot
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29u
dHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IF9uZXR3
b3JrMUhhbmRsZXI7Ci0gICAgVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNo
ZXIgKl9uZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVy
Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29u
dHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAg
W19uZXR3b3JrMUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW19uZXR3b3JrM0V2ZW50RGlzcGF0Y2hl
ciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0TmV0d29y
azFIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+KWhhbmRsZXIK
LXsKLSAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29yazFIYW5kbGVyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBbX25ldHdvcmsxSGFuZGxlciByZWxlYXNlXTsKLSAgICBfbmV0d29yazFIYW5kbGVy
ID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IHN0
ZDo6bWFrZV91bmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+KGhh
bmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFsdGVy
bmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0
ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+PihBU0NJSUxpdGVyYWwoIk5ldHdvcmsxIiksICpf
Y29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xs
ZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChp
ZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+KW5ldHdvcmsxSGFuZGxlcgotewot
ICAgIHJldHVybiBfbmV0d29yazFIYW5kbGVyOwotfQotCi0tIChUZXN0UHJvdG9jb2xOZXR3b3Jr
M0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKW5ldHdvcmszRXZlbnREaXNwYXRjaGVyCi17Ci0gICAg
aWYgKCFfbmV0d29yazNFdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9uZXR3b3JrM0V2ZW50RGlz
cGF0Y2hlciA9IFtbVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIgYWxs
b2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9uZXR3b3Jr
M0V2ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9t
YWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgot
Ci1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywg
cmV0YWluLCBzZXR0ZXI9c2V0TmV0d29yazFIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sTmV0d29y
azFEb21haW5IYW5kbGVyPiBuZXR3b3JrMUhhbmRsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyICpuZXR3
b3JrM0V2ZW50RGlzcGF0Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi0jaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKQotewot
ICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFj
ayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0
ZSBsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1B
TkRTKQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1
ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi1AaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqKWNvbnRyb2xsZXI7Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNl
bGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9j
b250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZCly
ZXNvdXJjZUxvYWRlZAotewotICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29u
dHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpz
b25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+
c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiTmV0d29yazMu
cmVzb3VyY2VMb2FkZWQiKSk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xF
dmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotQGNsYXNzIFRlc3RQcm90b2NvbE5l
dHdvcmsyTmV0d29ya0Vycm9yOwotCi0KLQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgi
ZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3Ig
OiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6
KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsK
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2Rl
OihpbnQpY29kZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBO
U1N0cmluZyAqbWVzc2FnZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBh
c3NpZ24pIGludCBjb2RlOwotQGVuZAotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazFE
b21haW5IYW5kbGVyIDxOU09iamVjdD4KLUByZXF1aXJlZAotLSAodm9pZClsb2FkUmVzb3VyY2VX
aXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi1fX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClyZXNv
dXJjZUxvYWRlZDsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQotQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0
ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9iakNFbnVt
VHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLQotCi0KLQot
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1k
b21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrMURvbWFp
bikKLQotQGVuZAotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdv
cmsyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU5ldHdvcmtFcnJvcjooVGVzdFByb3RvY29sTmV0
d29yazJOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0K
LUBlbmQKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrM0Rv
bWFpbikKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChOZXR3b3JrMURvbWFpbikKLQotQGVuZAotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTmV0d29y
a0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFBy
b3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2Fk
XTsKLX0KLQotQGVuZAotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoTmV0d29yazNEb21haW4pCi0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdp
dGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlv
bnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yCi0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBh
eWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9h
ZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtA
Im1lc3NhZ2UiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7Ci0gICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJj
b2RlIl0gaW50ZWdlclZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVj
dAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W2pz
b25PYmplY3QgdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2Fn
ZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlCi17Ci0gICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOwotCi0gICAgc2Vs
Zi5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICBzZWxmLmNvZGUgPSBjb2RlOwotCi0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0g
ICAgW3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAo
TlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJt
ZXNzYWdlIl07Ci19Ci0KLS0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKLXsKLSAgICBbc3VwZXIg
c2V0SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUiXTsKLX0KLQotLSAoaW50KWNvZGUKLXsKLSAg
ICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Ci19Ci0KLUBlbmQKLQotCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlw
ZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQt
ZG9tYWluLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWVkMmI3
NTU2ZDVhNTRjNTJmNmI1ZjY3NmI2Mjk1ZWEyMzcxMjIwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29u
LXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDg5MSArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTog
SW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5k
Q29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1k
aWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2
b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNw
YXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0g
ICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4g
bV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2Vu
ZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBl
LWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10
eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFz
cyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNh
bWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZl
cmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2Nv
bFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gVHlwZWRlZnMuCi1u
YW1lc3BhY2UgUnVudGltZSB7Ci0vKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuICovCi10eXBl
ZGVmIFN0cmluZyBSZW1vdGVPYmplY3RJZDsKLX0gLy8gUnVudGltZQotCi1uYW1lc3BhY2UgUnVu
dGltZTIgewotLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwotdHlwZWRlZiBTdHJpbmcg
UmVtb3RlT2JqZWN0SWQ7Ci19IC8vIFJ1bnRpbWUyCi0vLyBFbmQgb2YgdHlwZWRlZnMuCi0KLQot
Ci19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNh
bWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFj
ZSBQcm90b2NvbCB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFp
bi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
IF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihB
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0g
W3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBB
U1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJl
dHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107
Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
bW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWlu
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmls
aXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6
IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5t
bQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJl
bnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1p
ZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERp
c3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8
Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3QuaD4KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJl
bnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMu
aD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNp
b25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpD
RW51bVR5cGU+Ci1PYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpOwotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRp
bWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3RyaW5nICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZTJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNl
UmVtb3RlT2JqZWN0SWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3Ry
aW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICAqb3V0
VmFsdWUgPSAoTlNTdHJpbmcgKilwYXlsb2FkOwotfQotCi1AZW5kCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lMkRvbWFpbikKLQotKyAodm9pZClf
cGFyc2VSZW1vdGVPYmplY3RJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U1N0cmluZyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBheWxvYWQ7Ci19
Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZp
Zy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
VmFsdWVzLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5t
bQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9z
aGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDRhYTVhMTFkNDM3MGI0ZGIwNzhkZjQzNzI1ZDRiNDZjM2Y2NDllMDgu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9w
dGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDEwOTMg
KzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0
dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0jIyMg
RW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0
cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIg
PSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmRE
aXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQot
cHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNo
ZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRv
d2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVy
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0j
aW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQ
cm90b2NvbCB7Ci0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIFJ1bnRpbWUg
ewotY2xhc3MgS2V5UGF0aDsKLX0gLy8gUnVudGltZQotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFy
YXRpb25zLgotCi0KLQotCi1uYW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1TdHJpbmcgZ2V0RW51
bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcg
Z2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCi17Ci0gICAgcmV0dXJuIGdldEVudW1D
b25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFRlc3RIZWxwZXJzCi0KLW5hbWVzcGFjZSBSdW50aW1lIHsKLS8qIEtleSBwYXRoLiAq
LwotY2xhc3MgS2V5UGF0aCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2Ug
ewotcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxl
IGdlbmVyYXRpbmcgS2V5UGF0aC4KLSAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICBOdWxs
ID0gMCwKLSAgICAgICAgU3RyaW5nID0gMSwKLSAgICAgICAgQXJyYXkgPSAyLAotICAgIH07IC8v
IGVudW0gY2xhc3MgVHlwZQotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0g
ICAgICAgIFR5cGVTZXQgPSAxIDw8IDAsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChUeXBlU2V0
KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7
Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVp
bGRlcihSZWY8LypLZXlQYXRoKi9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAg
ICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBLZXlQYXRoOwot
ICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUo
VHlwZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJ0eXBlIiksIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwotICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVm
PEtleVBhdGg+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEtleVBhdGgpID09IHNpemVvZihJbnNwZWN0b3JPYmpl
Y3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICByZXR1cm4gV1RG
TW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8S2V5UGF0aD4qPigmcmVzdWx0KSk7Ci0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAg
ICogUmVmPEtleVBhdGg+IHJlc3VsdCA9IEtleVBhdGg6OmNyZWF0ZSgpCi0gICAgICogICAgIC5z
ZXRUeXBlKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMg
QnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgSW5z
cGVjdG9yT2JqZWN0QmFzZTo6c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic3RyaW5nIiksIHZhbHVl
KTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEFycmF5KFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxTdHJpbmc+PiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdEJh
c2U6OnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYXJyYXkiKSwgV1RGTW92ZSh2YWx1ZSkpOwotICAg
IH0KLX07Ci0KLX0gLy8gUnVudGltZQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLXN0ZDo6b3B0aW9uYWw8UHJvdG9j
b2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotCi0v
LyBFbnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgotdGVtcGxhdGU8Pgotc3RkOjpvcHRpb25h
bDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlw
ZT4oY29uc3QgU3RyaW5nJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8g
bmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90
b2NvbCB7Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewotICAgICJudWxsIiwKLSAgICAic3RyaW5n
IiwKLSAgICAiYXJyYXkiLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBj
b2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBF
bnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgotdGVtcGxhdGU8Pgotc3RkOjpvcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4o
Y29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6TnVsbCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpTdHJpbmcsCi0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6QXJyYXks
Ci0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgaWYg
KHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ld
XSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5
UGF0aDo6VHlwZSljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLX0gLy8gbmFtZXNwYWNl
IFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRv
d2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0K
LQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hh
YmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIg
PSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsK
LSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2Vk
LW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQot
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25h
bC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9j
b2xSdW50aW1lS2V5UGF0aDsKLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJv
dG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpIHsKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0
aFR5cGVOdWxsLAotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZVN0cmluZywKLSAg
ICBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVBcnJheSwKLX07Ci0KLQotX19hdHRyaWJ1
dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFJ1
bnRpbWVLZXlQYXRoIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhUeXBlOihUZXN0UHJvdG9jb2xS
dW50aW1lS2V5UGF0aFR5cGUpdHlwZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBhc3NpZ24pIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSB0eXBlOwotLyogb3B0
aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpzdHJpbmc7Ci0v
KiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3Ry
aW5nPiovICphcnJheTsKLUBlbmQKLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
LmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi0KLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+
Ci1PYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwot
Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xSdW50aW1lS2V5
UGF0aFR5cGUgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xSdW50aW1lS2V5UGF0aFR5cGVOdWxsOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFs
KCJudWxsIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVTdHJpbmc6
Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInN0cmluZyIpOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sUnVudGltZUtleVBhdGhUeXBlQXJyYXk6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVy
YWwoImFycmF5Iik7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgVGVzdFByb3RvY29s
UnVudGltZUtleVBhdGhUeXBlIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KQotewotICAgIGlmICh2YWx1ZSA9PSAibnVsbCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xSdW50aW1lS2V5UGF0aFR5cGVOdWxsOwotICAgIGlmICh2YWx1ZSA9PSAic3RyaW5nIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZVN0cmluZzsKLSAgICBp
ZiAodmFsdWUgPT0gImFycmF5IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVL
ZXlQYXRoVHlwZUFycmF5OwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVOdWxsOwotfQotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2Vy
LmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
PgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VLZXlQYXRo
OihUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUtleVBhdGg6KFRlc3RQcm90
b2NvbFJ1bnRpbWVLZXlQYXRoICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5
IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aCBh
bGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hh
ZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbXBvcnQgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxl
bWVudGF0aW9uIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoCi0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBh
eWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9h
ZFtAInR5cGUiXSwgQCJ0eXBlIik7Ci0gICAgc2VsZi50eXBlID0gZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4ocGF5bG9hZFtAInR5cGUiXSk7Ci0KLSAg
ICBzZWxmLnN0cmluZyA9IHBheWxvYWRbQCJzdHJpbmciXTsKLQotICAgIHNlbGYuYXJyYXkgPSBv
YmpjQXJyYXlGcm9tUGF5bG9hZDxOU1N0cmluZz4ocGF5bG9hZFtAImFycmF5Il0pOwotCi0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0u
Z2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhUeXBlOihUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5
cGUpdHlwZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1
cm4gbmlsOwotCi0gICAgc2VsZi50eXBlID0gdHlwZTsKLQotICAgIHJldHVybiBzZWxmOwotfQot
Ci0tICh2b2lkKXNldFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlCi17
Ci0gICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKHR5cGUpIGZvcktleTpAInR5
cGUiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKXR5cGUKLXsKLSAg
ICByZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlw
ZT4oW3N1cGVyIHN0cmluZ0ZvcktleTpAInR5cGUiXSk7Ci19Ci0KLS0gKHZvaWQpc2V0U3RyaW5n
OihOU1N0cmluZyAqKXN0cmluZwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5nIGZvcktl
eTpAInN0cmluZyJdOwotfQotCi0tIChOU1N0cmluZyAqKXN0cmluZwotewotICAgIHJldHVybiBb
c3VwZXIgc3RyaW5nRm9yS2V5OkAic3RyaW5nIl07Ci19Ci0KLS0gKHZvaWQpc2V0QXJyYXk6KE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKWFycmF5Ci17Ci0gICAgW3N1cGVyIHNldEluc3BlY3RvckFy
cmF5Omluc3BlY3RvclN0cmluZ0FycmF5KGFycmF5KSBmb3JLZXk6QCJhcnJheSJdOwotfQotCi0t
IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhcnJheQotewotICAgIHJldHVybiBvYmpjU3RyaW5n
QXJyYXkoW3N1cGVyIGluc3BlY3RvckFycmF5Rm9yS2V5OkAiYXJyYXkiXSk7Ci19Ci0KLUBlbmQK
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1k
ZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFy
YXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMTY3ZDUwMWIzOGM5NTQ0MmI5ODc5ZjA0ODRjOTc4MDVjOTQ1NjhhYS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJh
dGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAg
LTEsODYyICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFs
aWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmlt
aXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBz
ZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hl
cikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZl
LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIK
LQotI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kUm91dGVyLmgiCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0j
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQot
Ci1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1lc3BhY2UgUnVu
dGltZSB7Ci0vKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuICovCi10eXBlZGVmIGludCBSZW1v
dGVPYmplY3RJZDsKLX0gLy8gUnVudGltZQotLy8gRW5kIG9mIHR5cGVkZWZzLgotCi0KLQotfSAv
LyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFt
ZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNl
ZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLQotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hh
YmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIg
PSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsK
LSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9j
b2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJm
YWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25m
aWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0
aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdC5oPgotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2Vk
LXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JW
YWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIu
aCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVJlbW90ZU9i
amVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQot
QGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50
aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU051bWJlciAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0g
KE5TTnVtYmVyICopcGF5bG9hZDsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW1wb3J0IDx3dGYv
QXNzZXJ0aW9ucy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlv
bi1hcnJheS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29u
LXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ2N2ZhY2Q1ZWM4MWU1ZWZj
YzRhYWFlMWVkMmVmNTdmZmQ0ZTJjNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0CisrKyAv
ZGV2L251bGwKQEAgLTEsMTAzNSArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFj
a2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotLy8gRGVidWdnZXIuCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51
bSgiRGVidWdnZXIuUmVhc29uIiwge0RpZWQ6ICJEaWVkIiwgRmFpbnRlZDogIkZhaW50ZWQiLCBI
dW5ncnk6ICJIdW5ncnkifSk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5k
cy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJh
eS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNs
YXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJh
Y2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7
IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5k
RGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0K
LQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJy
YXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFy
cmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRl
cjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
YXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oIgotCi0jaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVz
cGFjZSBQcm90b2NvbCB7Ci0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIERl
YnVnZ2VyIHsKLWVudW0gY2xhc3MgUmVhc29uOwotfSAvLyBEZWJ1Z2dlcgotLy8gRW5kIG9mIGZv
cndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIERlYnVnZ2Vy
IHsKLXR5cGVkZWYgaW50IEJyZWFrcG9pbnRJZDsKLX0gLy8gRGVidWdnZXIKLQotbmFtZXNwYWNl
IFJ1bnRpbWUgewotdHlwZWRlZiBpbnQgT2JqZWN0SWQ7Ci10eXBlZGVmIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PGludD4gTHVja3lOdW1iZXJzOwotdHlwZWRlZiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxTdHJpbmc+IEJhYnlOYW1lczsKLXR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0SWQ+IE5ld09iamVj
dHM7Ci10eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQ+IE9sZE9iamVjdHM7Ci10eXBlZGVmIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+
IFN0b3BSZWFzb25zOwotfSAvLyBSdW50aW1lCi0vLyBFbmQgb2YgdHlwZWRlZnMuCi0KLW5hbWVz
cGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29k
ZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShU
IGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nh
c3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQot
bmFtZXNwYWNlIERlYnVnZ2VyIHsKLS8qICAqLwotZW51bSBjbGFzcyBSZWFzb24gewotICAgIERp
ZWQgPSAwLAotICAgIEZhaW50ZWQgPSAxLAotICAgIEh1bmdyeSA9IDIsCi19OyAvLyBlbnVtIGNs
YXNzIFJlYXNvbgotfSAvLyBEZWJ1Z2dlcgotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLXN0ZDo6b3B0aW9uYWw8UHJv
dG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwot
Ci0vLyBFbnVtcyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0ZDo6b3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+KGNvbnN0
IFN0cmluZyYpOwotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi19IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
YXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
Ci0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi1u
YW1lc3BhY2UgVGVzdEhlbHBlcnMgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9j
b25zdGFudF92YWx1ZXNbXSA9IHsKLSAgICAiRGllZCIsCi0gICAgIkZhaW50ZWQiLAotICAgICJI
dW5ncnkiLAotfTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0g
ICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0
aGUgJ0RlYnVnZ2VyJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmluZyYgcHJvdG9j
b2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0g
ewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246
OkRpZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJl
YXNvbjo6RmFpbnRlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1
Z2dlcjo6UmVhc29uOjpIdW5ncnksCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IDM7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFs
dWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbiljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0K
LX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+Ci0KLQotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLQotCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1h
cnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVy
bmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0g
ICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAo
IXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAg
IF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9p
ZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3Rv
Y29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBlbmQKLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JW
YWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi0KLXR5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uKSB7Ci0g
ICAgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25EaWVkLAotICAgIFRlc3RQcm90b2NvbERlYnVn
Z2VyUmVhc29uRmFpbnRlZCwKLSAgICBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkh1bmdyeSwK
LX07Ci0KLQotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9iakNFbnVtVHlwZSBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLQotaW5saW5lIFN0cmluZyB0
b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uIHZhbHVlKQotewotICAg
IHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25EaWVk
OgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJEaWVkIik7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xEZWJ1Z2dlclJlYXNvbkZhaW50ZWQ6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwo
IkZhaW50ZWQiKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uSHVuZ3J5Ogot
ICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJIdW5ncnkiKTsKLSAgICB9Ci19Ci0KLXRlbXBs
YXRlPD4KLWlubGluZSBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbiBmcm9tUHJvdG9jb2xTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIkRpZWQiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25EaWVkOwotICAgIGlmICh2YWx1
ZSA9PSAiRmFpbnRlZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNv
bkZhaW50ZWQ7Ci0gICAgaWYgKHZhbHVlID09ICJIdW5ncnkiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sRGVidWdnZXJSZWFzb25IdW5ncnk7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRGllZDsKLX0KLQotCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2Ug
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEZWJ1Z2dlckRvbWFpbikKLQotKyAodm9pZClf
cGFyc2VCcmVha3BvaW50SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOwotKyAodm9pZClfcGFyc2VSZWFzb246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VPYmplY3RJZDooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJz
ZUx1Y2t5TnVtYmVyczooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VCYWJ5TmFtZXM6KE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3Bh
cnNlTmV3T2JqZWN0czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VPbGRPYmplY3RzOihOU0FycmF5Lyo8TlNO
dW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9w
YXJzZVN0b3BSZWFzb25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucyAoRGVidWdnZXJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlQnJlYWtw
b2ludElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNz
XSk7Ci0gICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClf
cGFyc2VSZWFzb246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
Ci17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcg
Y2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBAKEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uPihwYXlsb2FkKSk7Ci19Ci0KLUBlbmQKLUBpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0K
LSsgKHZvaWQpX3BhcnNlT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2Fk
LCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2Fk
OwotfQotCi0rICh2b2lkKV9wYXJzZUx1Y2t5TnVtYmVyczooTlNBcnJheS8qPE5TTnVtYmVyPiov
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7
Ci0gICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKXBheWxvYWQ7Ci19Ci0K
LSsgKHZvaWQpX3BhcnNlQmFieU5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKLSAgICAqb3V0
VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClf
cGFyc2VOZXdPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAo
TlNBcnJheS8qPE5TTnVtYmVyPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VPbGRP
YmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U0FycmF5Lyo8TlNOdW1iZXI+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8q
PE5TTnVtYmVyPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VTdG9wUmVhc29uczoo
TlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
Ci17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8q
PE5TU3RyaW5nPiovIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKXBheWxvYWQ7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFy
cmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5q
c29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU2NDAwNWRkODgwYTYwZGI5MzE4Mzg5MmRmMTU5MjA4
NGRlNDQyZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwx
MDM3ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0t
dHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8v
IFJ1bnRpbWUuCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiUnVudGltZS5GYXJtQW5p
bWFscyIsIHtQaWdzOiAiUGlncyIsIENvd3M6ICJDb3dzIiwgQ2F0czogIkNhdHMiLCBIZW5zOiAi
SGVucyJ9KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJSdW50aW1lLlR3b0xlZ2dl
ZEFuaW1hbHMiLCB7RHVja3M6ICJEdWNrcyIsIEhlbnM6ICJIZW5zIiwgQ3Jvd3M6ICJDcm93cyIs
IEZsYW1pbmdvczogIkZsYW1pbmdvcyJ9KTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2Vu
ZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9p
ZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0
Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAg
IEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1f
YmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmRE
aXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKLQotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0j
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRS
b3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oIgotCi0jaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFt
ZXNwYWNlIFByb3RvY29sIHsKLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2Ug
UnVudGltZSB7Ci1lbnVtIGNsYXNzIEZhcm1BbmltYWxzOwotZW51bSBjbGFzcyBUd29MZWdnZWRB
bmltYWxzOwotfSAvLyBSdW50aW1lCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0K
LQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29u
c3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFs
dWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVz
dEhlbHBlcnMKLQotbmFtZXNwYWNlIFJ1bnRpbWUgewotLyogICovCi1lbnVtIGNsYXNzIEZhcm1B
bmltYWxzIHsKLSAgICBQaWdzID0gMCwKLSAgICBDb3dzID0gMSwKLSAgICBDYXRzID0gMiwKLSAg
ICBIZW5zID0gMywKLX07IC8vIGVudW0gY2xhc3MgRmFybUFuaW1hbHMKLS8qICAqLwotZW51bSBj
bGFzcyBUd29MZWdnZWRBbmltYWxzIHsKLSAgICBEdWNrcyA9IDQsCi0gICAgSGVucyA9IDMsCi0g
ICAgQ3Jvd3MgPSA1LAotICAgIEZsYW1pbmdvcyA9IDYsCi19OyAvLyBlbnVtIGNsYXNzIFR3b0xl
Z2dlZEFuaW1hbHMKLX0gLy8gUnVudGltZQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLXN0ZDo6b3B0aW9uYWw8UHJv
dG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwot
Ci0vLyBFbnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgotdGVtcGxhdGU8Pgotc3RkOjpvcHRp
b25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxz
Pihjb25zdCBTdHJpbmcmKTsKLXRlbXBsYXRlPD4KLXN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNvbnN0
IFN0cmluZyYpOwotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi19IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
LQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLW5h
bWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2Nv
bnN0YW50X3ZhbHVlc1tdID0gewotICAgICJQaWdzIiwKLSAgICAiQ293cyIsCi0gICAgIkNhdHMi
LAotICAgICJIZW5zIiwKLSAgICAiRHVja3MiLAotICAgICJDcm93cyIsCi0gICAgIkZsYW1pbmdv
cyIsCi19OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKLSAgICBy
ZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Ci19Ci0KLS8vIEVudW1zIGluIHRoZSAn
UnVudGltZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1zdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJv
dG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1td
ID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1B
bmltYWxzOjpQaWdzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OkZhcm1BbmltYWxzOjpDb3dzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpDYXRzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpIZW5zLAotICAgIH07Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9
PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICBy
ZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzKWNvbnN0YW50
VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQotdGVtcGxhdGU8Pgot
c3RkOjpvcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmlt
YWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6VHdvTGVnZ2VkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RHVja3Ms
Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2Vk
QW5pbWFsczo6SGVucywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpUd29MZWdnZWRBbmltYWxzOjpDcm93cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpGbGFtaW5nb3MsCi0gICAgfTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29s
U3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAg
ICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5p
bWFscyljb25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Ci0K
LQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0j
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4K
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsK
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRl
YWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0t
dHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvclZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRj
aGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVj
dG9yOwotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMu
bW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0Zv
dW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dC5oPgotCi0KLQotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFJ1
bnRpbWVGYXJtQW5pbWFscykgewotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc1Bp
Z3MsCi0gICAgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ293cywKLSAgICBUZXN0UHJv
dG9jb2xSdW50aW1lRmFybUFuaW1hbHNDYXRzLAotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJt
QW5pbWFsc0hlbnMsCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9j
b2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscykgewotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29M
ZWdnZWRBbmltYWxzRHVja3MsCi0gICAgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1h
bHNIZW5zLAotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzQ3Jvd3MsCi0g
ICAgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNGbGFtaW5nb3MsCi19OwotCi0K
LQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xT
dHJpbmcoVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzIHZhbHVlKQotewotICAgIHN3aXRj
aCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzUGlnczoK
LSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiUGlncyIpOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sUnVudGltZUZhcm1BbmltYWxzQ293czoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
Q293cyIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ2F0czoKLSAg
ICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiQ2F0cyIpOwotICAgIGNhc2UgVGVzdFByb3RvY29s
UnVudGltZUZhcm1BbmltYWxzSGVuczoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiSGVu
cyIpOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIFRlc3RQcm90b2NvbFJ1bnRpbWVG
YXJtQW5pbWFscyBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAg
ICBpZiAodmFsdWUgPT0gIlBpZ3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGlt
ZUZhcm1BbmltYWxzUGlnczsKLSAgICBpZiAodmFsdWUgPT0gIkNvd3MiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ293czsKLSAgICBpZiAodmFsdWUgPT0g
IkNhdHMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ2F0
czsKLSAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
UnVudGltZUZhcm1BbmltYWxzSGVuczsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzUGlnczsKLX0KLQotaW5saW5lIFN0
cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxz
IHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sUnVu
dGltZVR3b0xlZ2dlZEFuaW1hbHNEdWNrczoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
RHVja3MiKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzSGVu
czoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiSGVucyIpOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNDcm93czoKLSAgICAgICAgcmV0dXJuIEFTQ0lJ
TGl0ZXJhbCgiQ3Jvd3MiKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRB
bmltYWxzRmxhbWluZ29zOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJGbGFtaW5nb3Mi
KTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBUZXN0UHJvdG9jb2xSdW50aW1lVHdv
TGVnZ2VkQW5pbWFscyBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUgPT0gIkR1Y2tzIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1
bnRpbWVUd29MZWdnZWRBbmltYWxzRHVja3M7Ci0gICAgaWYgKHZhbHVlID09ICJIZW5zIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzSGVuczsKLSAg
ICBpZiAodmFsdWUgPT0gIkNyb3dzIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRp
bWVUd29MZWdnZWRBbmltYWxzQ3Jvd3M7Ci0gICAgaWYgKHZhbHVlID09ICJGbGFtaW5nb3MiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNGbGFtaW5n
b3M7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1
bnRpbWVUd29MZWdnZWRBbmltYWxzRHVja3M7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRmFybUFuaW1hbHM6KE5TTnVt
YmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VU
d29MZWdnZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUZhcm1BbmltYWxzOihOU051bWJl
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgKm91dFZh
bHVlID0gQChJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xSdW50aW1l
RmFybUFuaW1hbHM+KHBheWxvYWQpKTsKLX0KLQotKyAodm9pZClfcGFyc2VUd29MZWdnZWRBbmlt
YWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7
Ci0gICAgKm91dFZhbHVlID0gQChJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJv
dG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFscz4ocGF5bG9hZCkpOwotfQotCi1AZW5kCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotI2ltcG9y
dCA8d3RmL0Fzc2VydGlvbnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3Qt
dHlwZS5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTljMDY2ZjQw
Mzg3ZTMyNDViYTdhZTdkYWQ0YzczM2RmYzM4YjAzYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJl
c3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDE5OTMgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IElu
c3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
b2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsK
LQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQg
c2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNo
ZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBC
YWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgotCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250
ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+
Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5h
bWVzcGFjZSBEYXRhYmFzZSB7Ci1jbGFzcyBFcnJvcjsKLWNsYXNzIE9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlOwotY2xhc3MgUGFyYW1ldGVyQnVuZGxlOwotY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5
TmFtZUNvbmZsaWN0czsKLWNsYXNzIER1bW15T2JqZWN0OwotfSAvLyBEYXRhYmFzZQotCi1uYW1l
c3BhY2UgVGVzdCB7Ci1jbGFzcyBQYXJhbWV0ZXJCdW5kbGU7Ci19IC8vIFRlc3QKLS8vIEVuZCBv
ZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0vLyBUeXBlZGVmcy4KLW5hbWVzcGFjZSBEYXRh
YmFzZSB7Ci10eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gRXJyb3JMaXN0OwotfSAvLyBEYXRhYmFzZQotLy8gRW5k
IG9mIHR5cGVkZWZzLgotCi1uYW1lc3BhY2UgRGF0YWJhc2UgewotLyogRGF0YWJhc2UgZXJyb3Iu
ICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2Ug
ewotcHVibGljOgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAg
IE1lc3NhZ2VTZXQgPSAxIDw8IDAsCi0gICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCi0gICAgICAg
IEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKLSAgICB9OwotCi0gICAgdGVt
cGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0lu
c3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUo
b2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOwotICAgIHB1YmxpYzoKLQotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3Nh
Z2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXNzYWdlIiksIHZhbHVlKTsKLSAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlf
Y29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcihBU0NJ
SUxpdGVyYWwoImNvZGUiKSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxD
b2RlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVv
ZihFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAg
ICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5v
bk51bGwoKTsKLSAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJl
ZjxFcnJvcj4qPigmcmVzdWx0KSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJv
cjo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0
Q29kZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRl
cjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQot
Y2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKk9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlKi9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3Vs
dChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUp
OwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRs
ZTsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgUmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiBy
ZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZihPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEluc3BlY3Rv
ck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIHJldHVy
biBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4q
PigmcmVzdWx0KSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiByZXN1
bHQgPSBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnJlbGVh
c2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldENvbHVtbk5hbWVzKFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IEluc3BlY3Rvck9iamVjdEJhc2U6OnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMi
KSwgV1RGTW92ZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0Tm90ZXMoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldFN0cmlu
ZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIHZhbHVlKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldFRp
bWVzdGFtcChkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNl
OjpzZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdmFsdWUpOwotICAgIH0KLQot
ICAgIHZvaWQgc2V0VmFsdWVzKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFs
dWUpCi0gICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoQVNDSUlM
aXRlcmFsKCJ2YWx1ZXMiKSwgV1RGTW92ZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0
UGF5bG9hZChSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCi0gICAgewot
ICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxv
YWQiKSwgV1RGTW92ZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0RXJyb3IoUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCi0gICAgewotICAg
ICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJlcnJvciIp
LCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRFcnJvckxpc3QoUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxpc3Q+IHZhbHVlKQotICAgIHsK
LSAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJlcnJv
ckxpc3QiKSwgV1RGTW92ZSh2YWx1ZSkpOwotICAgIH0KLX07Ci0KLWNsYXNzIFBhcmFtZXRlckJ1
bmRsZSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgewotcHVibGljOgot
ICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIENvbHVtbk5hbWVz
U2V0ID0gMSA8PCAwLAotICAgICAgICBOb3Rlc1NldCA9IDEgPDwgMSwKLSAgICAgICAgVGltZXN0
YW1wU2V0ID0gMSA8PCAyLAotICAgICAgICBWYWx1ZXNTZXQgPSAxIDw8IDMsCi0gICAgICAgIFBh
eWxvYWRTZXQgPSAxIDw8IDQsCi0gICAgICAgIEVycm9yU2V0ID0gMSA8PCA1LAotICAgICAgICBF
cnJvckxpc3RTZXQgPSAxIDw8IDYsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChDb2x1bW5OYW1l
c1NldCB8IE5vdGVzU2V0IHwgVGltZXN0YW1wU2V0IHwgVmFsdWVzU2V0IHwgUGF5bG9hZFNldCB8
IEVycm9yU2V0IHwgRXJyb3JMaXN0U2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypQYXJhbWV0ZXJCdW5kbGUqL0luc3Bl
Y3Rvck9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2Jq
ZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9G
aWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKLSAgICBwdWJsaWM6Ci0KLSAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IHZhbHVlKQotICAgICAgICB7
Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29sdW1uTmFtZXNTZXQpLCBw
cm9wZXJ0eV9jb2x1bW5OYW1lc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPENvbHVtbk5hbWVzU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVz
U2V0KSwgcHJvcGVydHlfbm90ZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIHZhbHVlKTsKLSAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNldCks
IHByb3BlcnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHZhbHVlKTsKLSAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVmFsdWVzU2V0KSwgcHJvcGVydHlfdmFsdWVzX2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwg
dmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQo
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3Bh
eWxvYWRfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKEFTQ0lJ
TGl0ZXJhbCgicGF5bG9hZCIpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFBheWxvYWRTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJy
b3JTZXQ+JiBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVy
cm9yPiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJyb3JfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoImVycm9yIiksIHZhbHVlKTsKLSAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JMaXN0U2V0PiYgc2V0RXJyb3JMaXN0KFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3JMaXN0PiB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9yTGlzdFNldCksIHByb3Bl
cnR5X2Vycm9yTGlzdF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJy
YXkoQVNDSUlMaXRlcmFsKCJlcnJvckxpc3QiKSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxFcnJvckxpc3RTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8UGFy
YW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihJ
bnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UGFyYW1ldGVyQnVuZGxlPio+
KCZyZXN1bHQpKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRp
YyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQYXJh
bWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRDb2x1bW5OYW1lcyguLi4pCi0g
ICAgICogICAgIC5zZXROb3RlcyguLi4pCi0gICAgICogICAgIC5zZXRUaW1lc3RhbXAoLi4uKQot
ICAgICAqICAgICAuc2V0VmFsdWVzKC4uLikKLSAgICAgKiAgICAgLnNldFBheWxvYWQoLi4uKQot
ICAgICAqICAgICAuc2V0RXJyb3IoLi4uKQotICAgICAqICAgICAuc2V0RXJyb3JMaXN0KC4uLikK
LSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRlcjxOb0Zp
ZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRz
U2V0PihJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi0vKiBDb25mbGlj
dGVkIG5hbWVzIG1heSBjYXVzZSBnZW5lcmF0ZWQgZ2V0dGVycy9zZXR0ZXJzIHRvIGNsYXNoIHdp
dGggYnVpbHQtaW4gSW5zcGVjdG9yT2JqZWN0IG1ldGhvZHMuICovCi1jbGFzcyBPYmplY3RXaXRo
UHJvcGVydHlOYW1lQ29uZmxpY3RzIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAg
ICAgICAgSW50ZWdlclNldCA9IDEgPDwgMCwKLSAgICAgICAgQXJyYXlTZXQgPSAxIDw8IDEsCi0g
ICAgICAgIFN0cmluZ1NldCA9IDEgPDwgMiwKLSAgICAgICAgVmFsdWVTZXQgPSAxIDw8IDMsCi0g
ICAgICAgIE9iamVjdFNldCA9IDEgPDwgNCwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKEludGVn
ZXJTZXQgfCBBcnJheVNldCB8IFN0cmluZ1NldCB8IFZhbHVlU2V0IHwgT2JqZWN0U2V0KQotICAg
IH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAg
cHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAg
ICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihS
ZWY8LypPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKi9JbnNwZWN0b3JPYmplY3Q+JiYg
b2JqZWN0KQotICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVu
ZCBjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOwotICAgIHB1YmxpYzoKLQot
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSW50ZWdlclNldD4mIHNldEludGVnZXIoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIEludGVnZXJTZXQpLCBwcm9wZXJ0eV9pbnRlZ2VyX2FscmVhZHlfc2V0KTsKLSAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJpbnRlZ2VyIiksIHZhbHVlKTsK
LSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SW50ZWdlclNldD4oKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBcnJheVNldD4mIHNldEFycmF5KGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBBcnJheVNldCksIHByb3BlcnR5X2FycmF5X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJhcnJheSIpLCB2YWx1ZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPEFycmF5U2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RyaW5n
U2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzdHJpbmciKSwgdmFsdWUpOwotICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxTdHJpbmdTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgVmFsdWVTZXQ+JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVTZXQpLCBw
cm9wZXJ0eV92YWx1ZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgidmFsdWUiKSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxWYWx1ZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBPYmplY3RTZXQ+JiBzZXRPYmplY3QoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9iamVjdFNldCksIHByb3BlcnR5
X29iamVjdF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFT
Q0lJTGl0ZXJhbCgib2JqZWN0IiksIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8T2JqZWN0U2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPE9iamVjdFdpdGhQcm9w
ZXJ0eU5hbWVDb25mbGljdHM+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVD
b25mbGljdHMpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAg
ICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VO
b25OdWxsKCk7Ci0gICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxS
ZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4qPigmcmVzdWx0KSk7Ci0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAg
ICogUmVmPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+IHJlc3VsdCA9IE9iamVjdFdp
dGhQcm9wZXJ0eU5hbWVDb25mbGljdHM6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRJbnRlZ2Vy
KC4uLikKLSAgICAgKiAgICAgLnNldEFycmF5KC4uLikKLSAgICAgKiAgICAgLnNldFN0cmluZygu
Li4pCi0gICAgICogICAgIC5zZXRWYWx1ZSguLi4pCi0gICAgICogICAgIC5zZXRPYmplY3QoLi4u
KQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLX0gLy8gRGF0
YWJhc2UKLQotbmFtZXNwYWNlIFRlc3QgewotY2xhc3MgUGFyYW1ldGVyQnVuZGxlIDogcHVibGlj
IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0g
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgQ29sdW1uTmFtZXNTZXQgPSAxIDw8IDAs
Ci0gICAgICAgIE5vdGVzU2V0ID0gMSA8PCAxLAotICAgICAgICBUaW1lc3RhbXBTZXQgPSAxIDw8
IDIsCi0gICAgICAgIFZhbHVlc1NldCA9IDEgPDwgMywKLSAgICAgICAgUGF5bG9hZFNldCA9IDEg
PDwgNCwKLSAgICAgICAgRXJyb3JTZXQgPSAxIDw8IDUsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9
IChDb2x1bW5OYW1lc1NldCB8IE5vdGVzU2V0IHwgVGltZXN0YW1wU2V0IHwgVmFsdWVzU2V0IHwg
UGF5bG9hZFNldCB8IEVycm9yU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypQYXJhbWV0ZXJCdW5kbGUqL0luc3BlY3Rv
ck9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0
KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKLSAgICBwdWJsaWM6Ci0KLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29sdW1uTmFtZXNTZXQpLCBwcm9w
ZXJ0eV9jb2x1bW5OYW1lc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCB2YWx1ZSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPENvbHVtbk5hbWVzU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAg
QnVpbGRlcjxTVEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0
KSwgcHJvcGVydHlfbm90ZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNldCksIHBy
b3BlcnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHZhbHVlKTsKLSAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgVmFsdWVzU2V0KSwgcHJvcGVydHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKLSAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFs
dWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxv
YWRfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0
ZXJhbCgicGF5bG9hZCIpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBh
eWxvYWRTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JT
ZXQ+JiBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
PiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IEVycm9yU2V0KSwgcHJvcGVydHlfZXJyb3JfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoImVycm9yIiksIHZhbHVlKTsKLSAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBS
ZWY8UGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
LSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5kbGUpID09IHNp
emVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UGFyYW1ldGVyQnVu
ZGxlPio+KCZyZXN1bHQpKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQg
PSBQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCi0gICAgICogICAgIC5zZXRDb2x1bW5OYW1lcygu
Li4pCi0gICAgICogICAgIC5zZXROb3RlcyguLi4pCi0gICAgICogICAgIC5zZXRUaW1lc3RhbXAo
Li4uKQotICAgICAqICAgICAuc2V0VmFsdWVzKC4uLikKLSAgICAgKiAgICAgLnNldFBheWxvYWQo
Li4uKQotICAgICAqICAgICAuc2V0RXJyb3IoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwot
ICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCkpOwotICAgIH0KLX07Ci0KLX0gLy8gVGVzdAotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJv
dG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVj
dC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQot
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19
IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotCi0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
bW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9i
amVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVy
bmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0g
ICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAo
IXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAg
IF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9p
ZClkZWFsbG9jCi17Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90
b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRl
cmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZp
Zy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JWYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0K
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xh
c3MgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcjsKLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFz
ZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOwotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlUGFy
YW1ldGVyQnVuZGxlOwotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3Bl
cnR5TmFtZUNvbmZsaWN0czsKLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0
OwotQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGU7Ci0KLQotCi0KLV9fYXR0
cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsK
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmlu
ZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNl
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilw
YXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopanNvbk9iamVjdDsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzOwotLyogb3B0aW9u
YWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpub3RlczsKLS8qIG9w
dGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSB0aW1lc3RhbXA7
Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKnZhbHVlczsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZDsKLS8qIG9wdGlvbmFsICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
KmVycm9yOwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJy
YXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICplcnJvckxpc3Q7Ci1AZW5kCi0KLV9f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZSA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlk
PiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90
b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29s
dW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0
cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilw
YXlsb2FkIGVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IgZXJyb3JMaXN0
OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdDsKLS8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKmNvbHVtbk5hbWVzOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IGNvcHkpIE5TU3RyaW5nICpub3RlczsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBhc3NpZ24pIGRvdWJsZSB0aW1lc3RhbXA7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlczsKLS8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqcGF5bG9hZDsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRh
aW4pIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKmVycm9yOwotLyogcmVxdWlyZWQgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yPiovICplcnJvckxpc3Q7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9w
ZXJ0eU5hbWVDb25mbGljdHMgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2Fk
OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEludGVnZXI6KE5TU3Ry
aW5nICopaW50ZWdlciBhcnJheTooTlNTdHJpbmcgKilhcnJheSBzdHJpbmc6KE5TU3RyaW5nICop
c3RyaW5nIHZhbHVlOihOU1N0cmluZyAqKXZhbHVlIG9iamVjdDooTlNTdHJpbmcgKilvYmplY3Q7
Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKmlu
dGVnZXI7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJp
bmcgKmFycmF5OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5T
U3RyaW5nICpzdHJpbmc7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29w
eSkgTlNTdHJpbmcgKnZhbHVlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IGNvcHkpIE5TU3RyaW5nICpvYmplY3Q7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2Jq
ZWN0IDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXls
b2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmpl
Y3Q7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlIDogUldJUHJvdG9jb2xKU09O
T2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNT
dHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmpl
Y3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMg
bm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVl
czooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKXBheWxvYWQgZXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJv
cjsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGNvcHkpIE5TU3RyaW5nICpub3RlczsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBhc3NpZ24pIGRvdWJsZSB0aW1lc3RhbXA7Ci0vKiByZXF1aXJlZCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlczsK
LS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqcGF5bG9hZDsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZXRhaW4pIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKmVycm9yOwotQGVuZAotCi0KLQot
Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
dWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvclZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbElu
dGVybmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmpl
Y3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3Rv
Y29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZp
Zy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwot
KyAodm9pZClfcGFyc2VFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFy
c2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZv
aWQpX3BhcnNlUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1
bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNl
T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czooVGVzdFByb3RvY29sRGF0YWJhc2VPYmpl
Y3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOwotKyAodm9pZClfcGFyc2VEdW1teU9iamVjdDooVGVzdFByb3RvY29sRGF0YWJhc2VE
dW1teU9iamVjdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCi0KLSsg
KHZvaWQpX3BhcnNlUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVu
ZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQot
Ci0rICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0g
W1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9h
ZF07Ci19Ci0KLSsgKHZvaWQpX3BhcnNlRXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TQXJy
YXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopcGF5bG9hZDsKLX0KLQotKyAodm9p
ZClfcGFyc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sRGF0YWJhc2VPcHRp
b25hbFBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAot
ewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFy
eSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi0r
ICh2b2lkKV9wYXJzZVBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0
ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsK
LSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlIGFs
bG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLSsgKHZvaWQpX3BhcnNlT2JqZWN0
V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czooVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRo
UHJvcGVydHlOYW1lQ29uZmxpY3RzICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
Ci17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9u
YXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVj
dFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2Fk
XTsKLX0KLQotKyAodm9pZClfcGFyc2VEdW1teU9iamVjdDooVGVzdFByb3RvY29sRGF0YWJhc2VE
dW1teU9iamVjdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10p
OwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdCBhbGxv
Y10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQotCi0rICh2b2lkKV9wYXJz
ZVBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZSAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9
IFtbVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZSBhbGxvY10gaW5pdFdpdGhQYXlsb2Fk
OnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3Qt
dHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwg
TlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdl
Iik7Ci0gICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKLQotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2Rl
Iik7Ci0gICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKLQot
ICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W2pzb25PYmplY3QgdG9JbnNwZWN0b3JPYmpl
Y3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0K
LQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNv
ZGU6KGludCljb2RlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KG1lc3NhZ2UsIEAibWVzc2FnZSIpOwotCi0gICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZTsKLSAg
ICBzZWxmLmNvZGUgPSBjb2RlOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0
TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzptZXNz
YWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAoTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0g
ICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKHZvaWQp
c2V0Q29kZTooaW50KWNvZGUKLXsKLSAgICBbc3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktleTpA
ImNvZGUiXTsKLX0KLQotLSAoaW50KWNvZGUKLXsKLSAgICByZXR1cm4gW3N1cGVyIGludGVnZXJG
b3JLZXk6QCJjb2RlIl07Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9h
ZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmls
OwotCi0gICAgc2VsZi5jb2x1bW5OYW1lcyA9IG9iamNBcnJheUZyb21QYXlsb2FkPE5TU3RyaW5n
PihwYXlsb2FkW0AiY29sdW1uTmFtZXMiXSk7Ci0KLSAgICBzZWxmLm5vdGVzID0gcGF5bG9hZFtA
Im5vdGVzIl07Ci0KLSAgICBzZWxmLnRpbWVzdGFtcCA9IFtwYXlsb2FkW0AidGltZXN0YW1wIl0g
ZG91YmxlVmFsdWVdOwotCi0gICAgc2VsZi52YWx1ZXMgPSBwYXlsb2FkW0AidmFsdWVzIl07Ci0K
LSAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkW0AicGF5bG9hZCJdOwotCi0gICAgc2VsZi5lcnJv
ciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBh
eWxvYWRbQCJlcnJvciJdXTsKLQotICAgIHNlbGYuZXJyb3JMaXN0ID0gb2JqY0FycmF5RnJvbVBh
eWxvYWQ8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4ocGF5bG9hZFtAImVycm9yTGlzdCJdKTsK
LQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVj
dDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdAotewotICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W2pzb25PYmplY3QgdG9JbnNwZWN0b3JP
YmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsK
LX0KLQotLSAodm9pZClzZXRDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29s
dW1uTmFtZXMKLXsKLSAgICBbc3VwZXIgc2V0SW5zcGVjdG9yQXJyYXk6aW5zcGVjdG9yU3RyaW5n
QXJyYXkoY29sdW1uTmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07Ci19Ci0KLS0gKE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCi17Ci0gICAgcmV0dXJuIG9iamNTdHJpbmdB
cnJheShbc3VwZXIgaW5zcGVjdG9yQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJdKTsKLX0KLQot
LSAodm9pZClzZXROb3RlczooTlNTdHJpbmcgKilub3RlcwotewotICAgIFtzdXBlciBzZXRTdHJp
bmc6bm90ZXMgZm9yS2V5OkAibm90ZXMiXTsKLX0KLQotLSAoTlNTdHJpbmcgKilub3Rlcwotewot
ICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibm90ZXMiXTsKLX0KLQotLSAodm9pZClz
ZXRUaW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAKLXsKLSAgICBbc3VwZXIgc2V0RG91YmxlOnRp
bWVzdGFtcCBmb3JLZXk6QCJ0aW1lc3RhbXAiXTsKLX0KLQotLSAoZG91YmxlKXRpbWVzdGFtcAot
ewotICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAidGltZXN0YW1wIl07Ci19Ci0KLS0g
KHZvaWQpc2V0VmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKLXsKLSAgICBb
c3VwZXIgc2V0T2JqZWN0OnZhbHVlcyBmb3JLZXk6QCJ2YWx1ZXMiXTsKLX0KLQotLSAoUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCi17Ci0gICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09O
T2JqZWN0IGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktl
eTpAInZhbHVlcyJdIHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0
UGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAotewotICAgIFtzdXBlciBz
ZXRPYmplY3Q6cGF5bG9hZCBmb3JLZXk6QCJwYXlsb2FkIl07Ci19Ci0KLS0gKFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKXBheWxvYWQKLXsKLSAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmpl
Y3QgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAi
cGF5bG9hZCJdIHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0RXJy
b3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgotewotICAgIFtzdXBlciBzZXRP
YmplY3Q6ZXJyb3IgZm9yS2V5OkAiZXJyb3IiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciAqKWVycm9yCi17Ci0gICAgcmV0dXJuIFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJl
cnJvciJdIHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0RXJyb3JM
aXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAot
ewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoZXJyb3JMaXN0LCBb
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBjbGFzc10pOwotICAgIFtzdXBlciBzZXRJbnNwZWN0
b3JBcnJheTppbnNwZWN0b3JPYmplY3RBcnJheShlcnJvckxpc3QpIGZvcktleTpAImVycm9yTGlz
dCJdOwotfQotCi0tIChOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVy
cm9yTGlzdAotewotICAgIHJldHVybiBvYmpjQXJyYXk8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
cj4oW3N1cGVyIGluc3BlY3RvckFycmF5Rm9yS2V5OkAiZXJyb3JMaXN0Il0pOwotfQotCi1AZW5k
Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZQot
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxO
U1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdLCBAImNvbHVtbk5hbWVzIik7Ci0g
ICAgc2VsZi5jb2x1bW5OYW1lcyA9IG9iamNBcnJheUZyb21QYXlsb2FkPE5TU3RyaW5nPihwYXls
b2FkW0AiY29sdW1uTmFtZXMiXSk7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWRbQCJub3RlcyJdLCBAIm5vdGVzIik7Ci0gICAgc2VsZi5ub3RlcyA9
IHBheWxvYWRbQCJub3RlcyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AidGltZXN0YW1wIl0sIEAidGltZXN0YW1wIik7Ci0gICAgc2VsZi50
aW1lc3RhbXAgPSBbcGF5bG9hZFtAInRpbWVzdGFtcCJdIGRvdWJsZVZhbHVlXTsKLQotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInZhbHVlcyJdLCBA
InZhbHVlcyIpOwotICAgIHNlbGYudmFsdWVzID0gcGF5bG9hZFtAInZhbHVlcyJdOwotCi0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AicGF5bG9hZCJd
LCBAInBheWxvYWQiKTsKLSAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkW0AicGF5bG9hZCJdOwot
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiZXJy
b3IiXSwgQCJlcnJvciIpOwotICAgIHNlbGYuZXJyb3IgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AiZXJyb3IiXV07Ci0KLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJlcnJvckxpc3Qi
XSwgQCJlcnJvckxpc3QiKTsKLSAgICBzZWxmLmVycm9yTGlzdCA9IG9iamNBcnJheUZyb21QYXls
b2FkPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KHBheWxvYWRbQCJlcnJvckxpc3QiXSk7Ci0K
LSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltqc29uT2JqZWN0IHRvSW5zcGVjdG9yT2Jq
ZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRv
dWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5
bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqKWVycm9yIGVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGlu
aXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh2YWx1ZXMsIEAidmFsdWVzIik7Ci0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkLCBAInBheWxv
YWQiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGVycm9yLCBA
ImVycm9yIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShlcnJv
ckxpc3QsIEAiZXJyb3JMaXN0Iik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9J
Tl9BUlJBWShlcnJvckxpc3QsIFtUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGNsYXNzXSk7Ci0K
LSAgICBzZWxmLmNvbHVtbk5hbWVzID0gY29sdW1uTmFtZXM7Ci0gICAgc2VsZi5ub3RlcyA9IG5v
dGVzOwotICAgIHNlbGYudGltZXN0YW1wID0gdGltZXN0YW1wOwotICAgIHNlbGYudmFsdWVzID0g
dmFsdWVzOwotICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWQ7Ci0gICAgc2VsZi5lcnJvciA9IGVy
cm9yOwotICAgIHNlbGYuZXJyb3JMaXN0ID0gZXJyb3JMaXN0OwotCi0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKHZvaWQpc2V0Q29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNv
bHVtbk5hbWVzCi17Ci0gICAgW3N1cGVyIHNldEluc3BlY3RvckFycmF5Omluc3BlY3RvclN0cmlu
Z0FycmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6QCJjb2x1bW5OYW1lcyJdOwotfQotCi0tIChOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcwotewotICAgIHJldHVybiBvYmpjU3RyaW5n
QXJyYXkoW3N1cGVyIGluc3BlY3RvckFycmF5Rm9yS2V5OkAiY29sdW1uTmFtZXMiXSk7Ci19Ci0K
LS0gKHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5nICopbm90ZXMKLXsKLSAgICBbc3VwZXIgc2V0U3Ry
aW5nOm5vdGVzIGZvcktleTpAIm5vdGVzIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopbm90ZXMKLXsK
LSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm5vdGVzIl07Ci19Ci0KLS0gKHZvaWQp
c2V0VGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wCi17Ci0gICAgW3N1cGVyIHNldERvdWJsZTp0
aW1lc3RhbXAgZm9yS2V5OkAidGltZXN0YW1wIl07Ci19Ci0KLS0gKGRvdWJsZSl0aW1lc3RhbXAK
LXsKLSAgICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAInRpbWVzdGFtcCJdOwotfQotCi0t
ICh2b2lkKXNldFZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCi17Ci0gICAg
W3N1cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9yS2V5OkAidmFsdWVzIl07Ci19Ci0KLS0gKFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcwotewotICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNP
Tk9iamVjdCBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W1tzdXBlciBvYmplY3RGb3JL
ZXk6QCJ2YWx1ZXMiXSB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldOwotfQotCi0tICh2b2lkKXNl
dFBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKLXsKLSAgICBbc3VwZXIg
c2V0T2JqZWN0OnBheWxvYWQgZm9yS2V5OkAicGF5bG9hZCJdOwotfQotCi0tIChSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilwYXlsb2FkCi17Ci0gICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2Jq
ZWN0IGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpA
InBheWxvYWQiXSB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldOwotfQotCi0tICh2b2lkKXNldEVy
cm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKLXsKLSAgICBbc3VwZXIgc2V0
T2JqZWN0OmVycm9yIGZvcktleTpAImVycm9yIl07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgKillcnJvcgotewotICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAi
ZXJyb3IiXSB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldOwotfQotCi0tICh2b2lkKXNldEVycm9y
TGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QK
LXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFX0lOX0FSUkFZKGVycm9yTGlzdCwg
W1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgY2xhc3NdKTsKLSAgICBbc3VwZXIgc2V0SW5zcGVj
dG9yQXJyYXk6aW5zcGVjdG9yT2JqZWN0QXJyYXkoZXJyb3JMaXN0KSBmb3JLZXk6QCJlcnJvckxp
c3QiXTsKLX0KLQotLSAoTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKill
cnJvckxpc3QKLXsKLSAgICByZXR1cm4gb2JqY0FycmF5PFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3I+KFtzdXBlciBpbnNwZWN0b3JBcnJheUZvcktleTpAImVycm9yTGlzdCJdKTsKLX0KLQotQGVu
ZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVy
dHlOYW1lQ29uZmxpY3RzCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51
bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImludGVnZXIiXSwgQCJpbnRl
Z2VyIik7Ci0gICAgc2VsZi5pbnRlZ2VyID0gcGF5bG9hZFtAImludGVnZXIiXTsKLQotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImFycmF5Il0sIEAi
YXJyYXkiKTsKLSAgICBzZWxmLmFycmF5ID0gcGF5bG9hZFtAImFycmF5Il07Ci0KLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJzdHJpbmciXSwgQCJz
dHJpbmciKTsKLSAgICBzZWxmLnN0cmluZyA9IHBheWxvYWRbQCJzdHJpbmciXTsKLQotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInZhbHVlIl0sIEAi
dmFsdWUiKTsKLSAgICBzZWxmLnZhbHVlID0gcGF5bG9hZFtAInZhbHVlIl07Ci0KLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJvYmplY3QiXSwgQCJv
YmplY3QiKTsKLSAgICBzZWxmLm9iamVjdCA9IHBheWxvYWRbQCJvYmplY3QiXTsKLQotICAgIHJl
dHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W2pzb25PYmplY3QgdG9JbnNwZWN0b3JPYmplY3RdLmdl
dCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoSW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyIGFycmF5OihO
U1N0cmluZyAqKWFycmF5IHN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgdmFsdWU6KE5TU3RyaW5n
ICopdmFsdWUgb2JqZWN0OihOU1N0cmluZyAqKW9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShpbnRlZ2VyLCBAImludGVnZXIiKTsKLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGFycmF5LCBAImFycmF5Iik7Ci0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShzdHJpbmcsIEAic3RyaW5nIik7Ci0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh2YWx1ZSwgQCJ2YWx1ZSIp
OwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkob2JqZWN0LCBAIm9i
amVjdCIpOwotCi0gICAgc2VsZi5pbnRlZ2VyID0gaW50ZWdlcjsKLSAgICBzZWxmLmFycmF5ID0g
YXJyYXk7Ci0gICAgc2VsZi5zdHJpbmcgPSBzdHJpbmc7Ci0gICAgc2VsZi52YWx1ZSA9IHZhbHVl
OwotICAgIHNlbGYub2JqZWN0ID0gb2JqZWN0OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KHZvaWQpc2V0SW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2VyCi17Ci0gICAgW3N1cGVyIHNldFN0
cmluZzppbnRlZ2VyIGZvcktleTpAImludGVnZXIiXTsKLX0KLQotLSAoTlNTdHJpbmcgKilpbnRl
Z2VyCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJpbnRlZ2VyIl07Ci19Ci0K
LS0gKHZvaWQpc2V0QXJyYXk6KE5TU3RyaW5nICopYXJyYXkKLXsKLSAgICBbc3VwZXIgc2V0U3Ry
aW5nOmFycmF5IGZvcktleTpAImFycmF5Il07Ci19Ci0KLS0gKE5TU3RyaW5nICopYXJyYXkKLXsK
LSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAImFycmF5Il07Ci19Ci0KLS0gKHZvaWQp
c2V0U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6c3Ry
aW5nIGZvcktleTpAInN0cmluZyJdOwotfQotCi0tIChOU1N0cmluZyAqKXN0cmluZwotewotICAg
IHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAic3RyaW5nIl07Ci19Ci0KLS0gKHZvaWQpc2V0
VmFsdWU6KE5TU3RyaW5nICopdmFsdWUKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOnZhbHVlIGZv
cktleTpAInZhbHVlIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopdmFsdWUKLXsKLSAgICByZXR1cm4g
W3N1cGVyIHN0cmluZ0ZvcktleTpAInZhbHVlIl07Ci19Ci0KLS0gKHZvaWQpc2V0T2JqZWN0OihO
U1N0cmluZyAqKW9iamVjdAotewotICAgIFtzdXBlciBzZXRTdHJpbmc6b2JqZWN0IGZvcktleTpA
Im9iamVjdCJdOwotfQotCi0tIChOU1N0cmluZyAqKW9iamVjdAotewotICAgIHJldHVybiBbc3Vw
ZXIgc3RyaW5nRm9yS2V5OkAib2JqZWN0Il07Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9u
IFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9h
ZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmls
OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Ci17Ci0gICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rv
ck9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxm
OwotfQotCi1AZW5kCi0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0
ZXJCdW5kbGUKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29sdW1uTmFtZXMiXSwgQCJjb2x1bW5O
YW1lcyIpOwotICAgIHNlbGYuY29sdW1uTmFtZXMgPSBvYmpjQXJyYXlGcm9tUGF5bG9hZDxOU1N0
cmluZz4ocGF5bG9hZFtAImNvbHVtbk5hbWVzIl0pOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Aibm90ZXMiXSwgQCJub3RlcyIpOwotICAgIHNl
bGYubm90ZXMgPSBwYXlsb2FkW0Aibm90ZXMiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInRpbWVzdGFtcCJdLCBAInRpbWVzdGFtcCIpOwot
ICAgIHNlbGYudGltZXN0YW1wID0gW3BheWxvYWRbQCJ0aW1lc3RhbXAiXSBkb3VibGVWYWx1ZV07
Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ2
YWx1ZXMiXSwgQCJ2YWx1ZXMiKTsKLSAgICBzZWxmLnZhbHVlcyA9IHBheWxvYWRbQCJ2YWx1ZXMi
XTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtA
InBheWxvYWQiXSwgQCJwYXlsb2FkIik7Ci0gICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZFtAInBh
eWxvYWQiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5
bG9hZFtAImVycm9yIl0sIEAiZXJyb3IiKTsKLSAgICBzZWxmLmVycm9yID0gW1tUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAImVycm9yIl1d
OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Ci17Ci0gICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rv
ck9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxm
OwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5T
U3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1w
Oihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVz
IHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZXJyb3I6KFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobm90ZXMsIEAibm90ZXMiKTsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWQsIEAicGF5bG9h
ZCIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoZXJyb3IsIEAi
ZXJyb3IiKTsKLQotICAgIHNlbGYuY29sdW1uTmFtZXMgPSBjb2x1bW5OYW1lczsKLSAgICBzZWxm
Lm5vdGVzID0gbm90ZXM7Ci0gICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0gICAgc2Vs
Zi52YWx1ZXMgPSB2YWx1ZXM7Ci0gICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZDsKLSAgICBzZWxm
LmVycm9yID0gZXJyb3I7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRDb2x1
bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKLXsKLSAgICBbc3Vw
ZXIgc2V0SW5zcGVjdG9yQXJyYXk6aW5zcGVjdG9yU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpIGZv
cktleTpAImNvbHVtbk5hbWVzIl07Ci19Ci0KLS0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNv
bHVtbk5hbWVzCi17Ci0gICAgcmV0dXJuIG9iamNTdHJpbmdBcnJheShbc3VwZXIgaW5zcGVjdG9y
QXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJdKTsKLX0KLQotLSAodm9pZClzZXROb3RlczooTlNT
dHJpbmcgKilub3RlcwotewotICAgIFtzdXBlciBzZXRTdHJpbmc6bm90ZXMgZm9yS2V5OkAibm90
ZXMiXTsKLX0KLQotLSAoTlNTdHJpbmcgKilub3RlcwotewotICAgIHJldHVybiBbc3VwZXIgc3Ry
aW5nRm9yS2V5OkAibm90ZXMiXTsKLX0KLQotLSAodm9pZClzZXRUaW1lc3RhbXA6KGRvdWJsZSl0
aW1lc3RhbXAKLXsKLSAgICBbc3VwZXIgc2V0RG91YmxlOnRpbWVzdGFtcCBmb3JLZXk6QCJ0aW1l
c3RhbXAiXTsKLX0KLQotLSAoZG91YmxlKXRpbWVzdGFtcAotewotICAgIHJldHVybiBbc3VwZXIg
ZG91YmxlRm9yS2V5OkAidGltZXN0YW1wIl07Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWVzOihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OnZhbHVl
cyBmb3JLZXk6QCJ2YWx1ZXMiXTsKLX0KLQotLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFs
dWVzCi17Ci0gICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0
aEluc3BlY3Rvck9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJdIHRvSW5zcGVj
dG9yT2JqZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0UGF5bG9hZDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopcGF5bG9hZAotewotICAgIFtzdXBlciBzZXRPYmplY3Q6cGF5bG9hZCBmb3JL
ZXk6QCJwYXlsb2FkIl07Ci19Ci0KLS0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQK
LXsKLSAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSW5z
cGVjdG9yT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdIHRvSW5zcGVjdG9y
T2JqZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQpc2V0RXJyb3I6KFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgKillcnJvcgotewotICAgIFtzdXBlciBzZXRPYmplY3Q6ZXJyb3IgZm9yS2V5OkAi
ZXJyb3IiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17Ci0g
ICAgcmV0dXJuIFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhJbnNw
ZWN0b3JPYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdIHRvSW5zcGVjdG9yT2Jq
ZWN0XS5nZXQoKV07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBmMWZkMmFjODFkNWVjZjRlZDY3ZDYxZGM5ZDAxMjRmOGRiNDJiNTk2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVp
cmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTU4OCAr
MCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLS8vIFRl
c3QuCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiVGVzdC5VbmNhc3RlZEFuaW1hbHMi
LCB7UGlnczogIlBpZ3MiLCBDb3dzOiAiQ293cyIsIENhdHM6ICJDYXRzIiwgSGVuczogIkhlbnMi
fSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiVGVzdC5DYXN0ZWRBbmltYWxzIiwg
e0R1Y2tzOiAiRHVja3MiLCBIZW5zOiAiSGVucyIsIENyb3dzOiAiQ3Jvd3MiLCBGbGFtaW5nb3M6
ICJGbGFtaW5nb3MifSk7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1j
YXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNw
cmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFz
cyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNr
ZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBt
X2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmRE
aXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERp
c3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVy
PiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQot
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3Bw
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGlt
ZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50
aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0
ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1y
dW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgiCi0KLSNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25j
ZQotCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5h
bWVzcGFjZSBQcm90b2NvbCB7Ci0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNl
IFRlc3QgewotY2xhc3MgVHlwZU5lZWRpbmdDYXN0OwotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MTsK
LWNsYXNzIFJlY3Vyc2l2ZU9iamVjdDI7Ci1lbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFsczsKLWVu
dW0gY2xhc3MgQ2FzdGVkQW5pbWFsczsKLX0gLy8gVGVzdAotLy8gRW5kIG9mIGZvcndhcmQgZGVj
bGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIFRlc3QgewotdHlwZWRlZiBp
bnQgQ2FzdGVkT2JqZWN0SWQ7Ci10eXBlZGVmIGludCBVbmNhc3RlZE9iamVjdElkOwotfSAvLyBU
ZXN0Ci0vLyBFbmQgb2YgdHlwZWRlZnMuCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0
cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1
cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotbmFtZXNwYWNlIFRlc3QgewotLyogQSBk
dW1teSB0eXBlIHRoYXQgcmVxdWlyZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24tcHJp
bWl0aXZlIHJlZmVyZW5jZWQgdHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxwZXJz
LiAqLwotY2xhc3MgVHlwZU5lZWRpbmdDYXN0IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKLSAgICAgICAgU3RyaW5nU2V0ID0gMSA8PCAwLAotICAgICAgICBOdW1iZXJTZXQgPSAxIDw8
IDEsCi0gICAgICAgIEFuaW1hbHNTZXQgPSAxIDw8IDIsCi0gICAgICAgIElkU2V0ID0gMSA8PCAz
LAotICAgICAgICBUcmVlU2V0ID0gMSA8PCA0LAotICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU3Ry
aW5nU2V0IHwgTnVtYmVyU2V0IHwgQW5pbWFsc1NldCB8IElkU2V0IHwgVHJlZVNldCkKLSAgICB9
OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHBy
aXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAg
ICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVy
PFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVm
PC8qVHlwZU5lZWRpbmdDYXN0Ki9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQotICAgICAgICAg
ICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBUeXBlTmVlZGlu
Z0Nhc3Q7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHJpbmdTZXQ+
JiBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0cmluZ1NldCksIHByb3BlcnR5X3N0cmluZ19hbHJl
YWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
c3RyaW5nIiksIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RyaW5nU2V0
PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE51bWJlclNldD4mIHNl
dE51bWJlcihpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBOdW1iZXJTZXQpLCBwcm9wZXJ0eV9udW1iZXJfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJudW1iZXIiKSwgdmFs
dWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOdW1iZXJTZXQ+KCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQW5pbWFsc1NldD4mIHNldEFuaW1hbHMoSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscyB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFuaW1hbHNTZXQpLCBwcm9wZXJ0
eV9hbmltYWxzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJhbmltYWxzIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJz
OjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxBbmltYWxzU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8
IElkU2V0PiYgc2V0SWQoaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgSWRTZXQpLCBwcm9wZXJ0eV9pZF9hbHJlYWR5X3NldCk7Ci0gICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImlkIiksIHZhbHVlKTsK
LSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SWRTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgVHJlZVNldD4mIHNldFRyZWUoUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHJlZVNldCksIHByb3BlcnR5X3RyZWVf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVy
YWwoInRyZWUiKSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUcmVlU2V0
PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPFR5cGVOZWVkaW5nQ2FzdD4gcmVsZWFzZSgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxk
c1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChz
aXplb2YoVHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90
X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jl
c3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmPFR5cGVOZWVkaW5nQ2FzdD4qPigmcmVzdWx0KSk7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICog
UmVmPFR5cGVOZWVkaW5nQ2FzdD4gcmVzdWx0ID0gVHlwZU5lZWRpbmdDYXN0OjpjcmVhdGUoKQot
ICAgICAqICAgICAuc2V0U3RyaW5nKC4uLikKLSAgICAgKiAgICAgLnNldE51bWJlciguLi4pCi0g
ICAgICogICAgIC5zZXRBbmltYWxzKC4uLikKLSAgICAgKiAgICAgLnNldElkKC4uLikKLSAgICAg
KiAgICAgLnNldFRyZWUoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAg
IHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwotICAg
IH0KLX07Ci0KLS8qICAqLwotZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHMgewotICAgIFBpZ3Mg
PSA0LAotICAgIENvd3MgPSA1LAotICAgIENhdHMgPSA2LAotICAgIEhlbnMgPSAxLAotfTsgLy8g
ZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHMKLS8qICAqLwotZW51bSBjbGFzcyBDYXN0ZWRBbmlt
YWxzIHsKLSAgICBEdWNrcyA9IDAsCi0gICAgSGVucyA9IDEsCi0gICAgQ3Jvd3MgPSAyLAotICAg
IEZsYW1pbmdvcyA9IDMsCi19OyAvLyBlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMKLWNsYXNzIFJl
Y3Vyc2l2ZU9iamVjdDEgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsK
LXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBB
bGxGaWVsZHNTZXQgPSAwCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBj
bGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0K
LQotICAgICAgICBCdWlsZGVyKFJlZjwvKlJlY3Vyc2l2ZU9iamVjdDEqL0luc3BlY3Rvck9iamVj
dD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZnJpZW5kIGNsYXNzIFJlY3Vyc2l2ZU9iamVjdDE7Ci0gICAgcHVibGljOgotCi0gICAgICAgIFJl
ZjxSZWN1cnNpdmVPYmplY3QxPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
LSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWN1cnNpdmVPYmplY3QxKSA9PSBz
aXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAg
ICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFJlY3Vyc2l2ZU9i
amVjdDE+Kj4oJnJlc3VsdCkpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxSZWN1cnNpdmVPYmplY3QxPiByZXN1
bHQgPSBSZWN1cnNpdmVPYmplY3QxOjpjcmVhdGUoKQotICAgICAqICAgICAucmVsZWFzZSgpOwot
ICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0T2JqKFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEluc3Bl
Y3Rvck9iamVjdEJhc2U6OnNldE9iamVjdChBU0NJSUxpdGVyYWwoIm9iaiIpLCBXVEZNb3ZlKHZh
bHVlKSk7Ci0gICAgfQotfTsKLQotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MiA6IHB1YmxpYyBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0gewotICAgICAg
ICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IDAKLSAgICB9OwotCi0g
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6
Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRF
IHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qUmVj
dXJzaXZlT2JqZWN0MiovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDog
bV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgUmVjdXJzaXZlT2JqZWN0
MjsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgUmVmPFJlY3Vyc2l2ZU9iamVjdDI+IHJlbGVhc2Uo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVs
ZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
c2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDIpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5u
b3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1f
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVp
bnRlcnByZXRfY2FzdDxSZWY8UmVjdXJzaXZlT2JqZWN0Mj4qPigmcmVzdWx0KSk7Ci0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAg
ICogUmVmPFJlY3Vyc2l2ZU9iamVjdDI+IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVjdDI6OmNyZWF0
ZSgpCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBz
ZXRPYmooUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+
IHZhbHVlKQotICAgIHsKLSAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgib2JqIiksIFdURk1vdmUodmFsdWUpKTsKLSAgICB9Ci19OwotCi19IC8vIFRl
c3QKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotc3RhdGljIHZv
aWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSop
OwotI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKLX07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBCaW5k
aW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gewot
c3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+
IHJ1bnRpbWVDYXN0KFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiYmIHZhbHVlKTsK
LSNpZiAhQVNTRVJUX0RJU0FCTEVECi1zdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKik7Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNB
QkxFRAotfTsKLXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gewotI2lmICFBU1NFUlRfRElTQUJMRUQKLXN0
YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWUqKTsKLSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECi19OwotdGVtcGxhdGU8PiBzdHJ1
Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmpl
Y3QyPiB7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOwotI2VuZGlmIC8vICFBU1NF
UlRfRElTQUJMRUQKLX07Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1zdGQ6Om9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLQotLy8gRW51bXMgaW4g
dGhlICdUZXN0JyBEb21haW4KLXRlbXBsYXRlPD4KLXN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcm
KTsKLXRlbXBsYXRlPD4KLXN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwotCi19IC8vIG5hbWVzcGFj
ZSBUZXN0SGVscGVycwotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQot
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Ci0gICAg
IkR1Y2tzIiwKLSAgICAiSGVucyIsCi0gICAgIkNyb3dzIiwKLSAgICAiRmxhbWluZ29zIiwKLSAg
ICAiUGlncyIsCi0gICAgIkNvd3MiLAotICAgICJDYXRzIiwKLX07Ci0KLVN0cmluZyBnZXRFbnVt
Q29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewotICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVl
c1tjb2RlXTsKLX0KLQotLy8gRW51bXMgaW4gdGhlICdUZXN0JyBEb21haW4KLXRlbXBsYXRlPD4K
LXN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxz
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5j
YXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OlBpZ3MsCi0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpDb3dzLAot
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFs
czo6Q2F0cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNh
c3RlZEFuaW1hbHM6OkhlbnMsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7
ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVz
W2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQotdGVtcGxhdGU8Pgotc3RkOjpvcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJp
bmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5n
JiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFs
dWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2Fz
dGVkQW5pbWFsczo6RHVja3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6Q2FzdGVkQW5pbWFsczo6SGVucywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpDcm93cywKLSAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpGbGFtaW5nb3MsCi0gICAgfTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29s
U3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAg
ICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscylj
b25zdGFudFZhbHVlc1tpXTsKLQotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Ci0KLQotfSAv
LyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotCi0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi12b2lk
IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46
OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZh
bHVlKQotewotICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICBTdHJpbmcgcmVzdWx0
OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc1N0cmluZyhyZXN1bHQpOwotICAg
IEFTU0VSVChjYXN0U3VjY2VlZGVkKTsKLSAgICBBU1NFUlQocmVzdWx0ID09ICJEdWNrcyIgfHwg
cmVzdWx0ID09ICJIZW5zIiB8fCByZXN1bHQgPT0gIkNyb3dzIiB8fCByZXN1bHQgPT0gIkZsYW1p
bmdvcyIpOwotfQotI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKLQotI2lmICFBU1NFUlRfRElT
QUJMRUQKLXZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBl
TmVlZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlKiB2YWx1ZSkKLXsKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9
IHZhbHVlLT5hc09iamVjdChvYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRl
ZCwgY2FzdFN1Y2NlZWRlZCk7Ci0gICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJh
dG9yIHN0cmluZ1BvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwoInN0cmluZyIpKTsKLSAg
ICAgICAgQVNTRVJUKHN0cmluZ1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGlu
Z1RyYWl0czxTdHJpbmc+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShzdHJpbmdQb3MtPnZh
bHVlLmdldCgpKTsKLSAgICB9Ci0gICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJh
dG9yIG51bWJlclBvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwoIm51bWJlciIpKTsKLSAg
ICAgICAgQVNTRVJUKG51bWJlclBvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGlu
Z1RyYWl0czxpbnQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShudW1iZXJQb3MtPnZhbHVl
LmdldCgpKTsKLSAgICB9Ci0gICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9y
IGFuaW1hbHNQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJhbmltYWxzIikpOwotICAg
ICAgICBBU1NFUlQoYW5pbWFsc1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGlu
Z1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUoYW5pbWFsc1Bvcy0+dmFsdWUuZ2V0KCkpOwotICAgIH0KLSAg
ICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaWRQb3MgPSBvYmplY3QtPmZp
bmQoQVNDSUlMaXRlcmFsKCJpZCIpKTsKLSAgICAgICAgQVNTRVJUKGlkUG9zICE9IG9iamVjdC0+
ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlKGlkUG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgfQotICAgIHsKLSAgICAgICAgSW5zcGVj
dG9yT2JqZWN0OjppdGVyYXRvciB0cmVlUG9zID0gb2JqZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgi
dHJlZSIpKTsKLSAgICAgICAgQVNTRVJUKHRyZWVQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAg
ICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2Jq
ZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHRyZWVQb3MtPnZhbHVlLmdldCgpKTsK
LSAgICB9Ci0KLSAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSA1OwotICAgIGlmIChmb3Vu
ZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKLSAgICAgICAgRkFUQUwoIlVuZXhw
ZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygp
LmFzY2lpKCkuZGF0YSgpKTsKLX0KLSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECi0KLVJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IEJpbmRpbmdUcmFp
dHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6cnVudGltZUNh
c3QoUmVmUHRyPEluc3BlY3RvclZhbHVlPiYmIHZhbHVlKQotewotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmpl
Y3QocmVzdWx0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVk
ZWQpOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKHJlc3VsdC5nZXQoKSk7Ci0jZW5kaWYgIC8vICFBU1NFUlRfRElTQUJMRUQKLSAgICBDT01Q
SUxFX0FTU0VSVChzaXplb2YoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdD
YXN0KSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5l
ZWRpbmdDYXN0Kj4oc3RhdGljX2Nhc3Q8SW5zcGVjdG9yT2JqZWN0QmFzZSo+KHJlc3VsdC5nZXQo
KSkpOwotfQotCi0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi12b2lkIEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKQotewotICAgIEFT
U0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmpl
Y3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7Ci0g
ICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKLQotICAgIGlu
dCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7Ci0gICAgewotICAgICAgICBJbnNwZWN0b3JPYmpl
Y3Q6Oml0ZXJhdG9yIG9ialBvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwoIm9iaiIpKTsK
LSAgICAgICAgaWYgKG9ialBvcyAhPSBvYmplY3QtPmVuZCgpKSB7Ci0gICAgICAgICAgICBCaW5k
aW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojph
c3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLmdldCgpKTsKLSAgICAgICAg
ICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGZv
dW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKQotICAgICAgICBGQVRBTCgiVW5l
eHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpOwotfQotI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKLQotI2lm
ICFBU1NFUlRfRElTQUJMRUQKLXZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCi17Ci0gICAgQVNTRVJUX0FSRyh2YWx1ZSwg
dmFsdWUpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKLSAgICBib29sIGNh
c3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKLSAgICBBU1NFUlRfVU5VU0VE
KGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwotCi0gICAgaW50IGZvdW5kUHJvcGVydGll
c0NvdW50ID0gMDsKLSAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3Igb2Jq
UG9zID0gb2JqZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgib2JqIikpOwotICAgICAgICBpZiAob2Jq
UG9zICE9IG9iamVjdC0+ZW5kKCkpIHsKLSAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKG9ialBvcy0+dmFsdWUuZ2V0KCkpOwotICAgICAgICAgICAgKytmb3VuZFByb3Bl
cnRpZXNDb3VudDsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291
bnQgIT0gb2JqZWN0LT5zaXplKCkpCi0gICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRp
ZXMgaW4gb2JqZWN0OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEo
KSk7Ci19Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAotCi19IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVp
cmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQu
aD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhD
b250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsK
LSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9s
bGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3Vw
ZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1
bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uIDogTlNPYmplY3QKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1
aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
cmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8
Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xhc3MgVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5n
Q2FzdDsKLUBjbGFzcyBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MTsKLUBjbGFzcyBU
ZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MjsKLQotCi10eXBlZGVmIE5TX0VOVU0oTlNJ
bnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzKSB7Ci0gICAgVGVzdFByb3Rv
Y29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3MsCi0gICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVk
QW5pbWFsc0Nvd3MsCi0gICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHMsCi0g
ICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnMsCi19OwotCi10eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscykgewotICAgIFRl
c3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3MsCi0gICAgVGVzdFByb3RvY29sVGVzdENh
c3RlZEFuaW1hbHNIZW5zLAotICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzQ3Jvd3Ms
Ci0gICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3MsCi19OwotCi0KLV9f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0IDogUldJUHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICop
cGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTdHJpbmc6
KE5TU3RyaW5nICopc3RyaW5nIG51bWJlcjooaW50KW51bWJlciBhbmltYWxzOihUZXN0UHJvdG9j
b2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzIGlkZW50aWZpZXI6KGludClpZGVudGlmaWVyIHRy
ZWU6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICopdHJlZTsKLS8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqc3RyaW5nOwotLyogcmVx
dWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IG51bWJlcjsKLS8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFRlc3RQcm90b2NvbFRlc3RD
YXN0ZWRBbmltYWxzIGFuaW1hbHM7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgYXNzaWduKSBpbnQgaWRlbnRpZmllcjsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICp0cmVlOwot
QGVuZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZh
Y2UgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgOiBSV0lQcm90b2NvbEpTT05PYmpl
Y3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmlu
ZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS8qIG9wdGlvbmFsICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3Qy
ICpvYmo7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiA6IFJXSVByb3RvY29s
SlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5
PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09O
T2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLyogb3B0aW9uYWwg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2
ZU9iamVjdDEgKm9iajsKLUBlbmQKLQotCi0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
IgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQotCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9i
akNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLQot
aW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFu
aW1hbHMgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xUZXN0VW5jYXN0ZWRBbmltYWxzUGlnczoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
UGlncyIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0Nvd3M6Ci0g
ICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkNvd3MiKTsKLSAgICBjYXNlIFRlc3RQcm90b2Nv
bFRlc3RVbmNhc3RlZEFuaW1hbHNDYXRzOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJD
YXRzIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzSGVuczoKLSAg
ICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiSGVucyIpOwotICAgIH0KLX0KLQotdGVtcGxhdGU8
PgotaW5saW5lIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHMgZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJQaWdzIikKLSAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzOwotICAgIGlm
ICh2YWx1ZSA9PSAiQ293cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0
ZWRBbmltYWxzQ293czsKLSAgICBpZiAodmFsdWUgPT0gIkNhdHMiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHM7Ci0gICAgaWYgKHZhbHVlID09ICJI
ZW5zIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNIZW5z
OwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0
VW5jYXN0ZWRBbmltYWxzUGlnczsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5n
KFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzIHZhbHVlKQotewotICAgIHN3aXRjaCh2YWx1
ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNEdWNrczoKLSAgICAg
ICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiRHVja3MiKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRl
c3RDYXN0ZWRBbmltYWxzSGVuczoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiSGVucyIp
OwotICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNDcm93czoKLSAgICAgICAg
cmV0dXJuIEFTQ0lJTGl0ZXJhbCgiQ3Jvd3MiKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RD
YXN0ZWRBbmltYWxzRmxhbWluZ29zOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJGbGFt
aW5nb3MiKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBUZXN0UHJvdG9jb2xUZXN0
Q2FzdGVkQW5pbWFscyBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUgPT0gIkR1Y2tzIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRl
c3RDYXN0ZWRBbmltYWxzRHVja3M7Ci0gICAgaWYgKHZhbHVlID09ICJIZW5zIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzSGVuczsKLSAgICBpZiAodmFsdWUg
PT0gIkNyb3dzIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxz
Q3Jvd3M7Ci0gICAgaWYgKHZhbHVlID09ICJGbGFtaW5nb3MiKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3M7Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3M7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVp
cmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50
ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKLQotKyAodm9p
ZClfcGFyc2VUeXBlTmVlZGluZ0Nhc3Q6KFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3Qg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUNhc3Rl
ZE9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
LSsgKHZvaWQpX3BhcnNlVW5jYXN0ZWRPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVVuY2FzdGVkQW5pbWFsczooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJz
ZUNhc3RlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOwotKyAodm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QxOihUZXN0UHJvdG9jb2xUZXN0UmVj
dXJzaXZlT2JqZWN0MSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZv
aWQpX3BhcnNlUmVjdXJzaXZlT2JqZWN0MjooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVj
dDIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxl
bWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKLQotKyAo
dm9pZClfcGFyc2VUeXBlTmVlZGluZ0Nhc3Q6KFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nh
c3QgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAq
b3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QgYWxsb2NdIGluaXRX
aXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotKyAodm9pZClfcGFyc2VDYXN0ZWRPYmplY3RJZDoo
TlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOwotICAg
ICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlVW5j
YXN0ZWRPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJl
ciBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Ci19Ci0KLSsg
KHZvaWQpX3BhcnNlVW5jYXN0ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5
bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gQChJbnNwZWN0b3I6OmZy
b21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzPihwYXlsb2Fk
KSk7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlQ2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IEAoSW5z
cGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+
KHBheWxvYWQpKTsKLX0KLQotKyAodm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QxOihUZXN0UHJv
dG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGlj
dGlvbmFyeSBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vy
c2l2ZU9iamVjdDEgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotKyAodm9p
ZClfcGFyc2VSZWN1cnNpdmVPYmplY3QyOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0
MiAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpv
dXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgYWxsb2NdIGluaXRX
aXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5n
LXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdAotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQ
YXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17
Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0K
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJzdHJp
bmciXSwgQCJzdHJpbmciKTsKLSAgICBzZWxmLnN0cmluZyA9IHBheWxvYWRbQCJzdHJpbmciXTsK
LQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm51
bWJlciJdLCBAIm51bWJlciIpOwotICAgIHNlbGYubnVtYmVyID0gW3BheWxvYWRbQCJudW1iZXIi
XSBpbnRlZ2VyVmFsdWVdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AiYW5pbWFscyJdLCBAImFuaW1hbHMiKTsKLSAgICBzZWxmLmFuaW1hbHMg
PSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+KHBheWxv
YWRbQCJhbmltYWxzIl0pOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AiaWRlbnRpZmllciJdLCBAImlkZW50aWZpZXIiKTsKLSAgICBzZWxmLmlk
ZW50aWZpZXIgPSBbcGF5bG9hZFtAImlkIl0gaW50ZWdlclZhbHVlXTsKLQotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInRyZWUiXSwgQCJ0cmVlIik7
Ci0gICAgc2VsZi50cmVlID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxv
Y10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJ0cmVlIl1dOwotCi0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilqc29uT2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aElu
c3BlY3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldKSkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIG51bWJlcjooaW50KW51bWJlciBh
bmltYWxzOihUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzIGlkZW50aWZpZXI6
KGludClpZGVudGlmaWVyIHRyZWU6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICop
dHJlZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4g
bmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShzdHJpbmcs
IEAic3RyaW5nIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh0
cmVlLCBAInRyZWUiKTsKLQotICAgIHNlbGYuc3RyaW5nID0gc3RyaW5nOwotICAgIHNlbGYubnVt
YmVyID0gbnVtYmVyOwotICAgIHNlbGYuYW5pbWFscyA9IGFuaW1hbHM7Ci0gICAgc2VsZi5pZGVu
dGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICBzZWxmLnRyZWUgPSB0cmVlOwotCi0gICAgcmV0dXJu
IHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZwotewotICAg
IFtzdXBlciBzZXRTdHJpbmc6c3RyaW5nIGZvcktleTpAInN0cmluZyJdOwotfQotCi0tIChOU1N0
cmluZyAqKXN0cmluZwotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAic3RyaW5n
Il07Ci19Ci0KLS0gKHZvaWQpc2V0TnVtYmVyOihpbnQpbnVtYmVyCi17Ci0gICAgW3N1cGVyIHNl
dEludGVnZXI6bnVtYmVyIGZvcktleTpAIm51bWJlciJdOwotfQotCi0tIChpbnQpbnVtYmVyCi17
Ci0gICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAibnVtYmVyIl07Ci19Ci0KLS0gKHZv
aWQpc2V0QW5pbWFsczooVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscwotewot
ICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhhbmltYWxzKSBmb3JLZXk6QCJh
bmltYWxzIl07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMK
LXsKLSAgICByZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRB
bmltYWxzPihbc3VwZXIgc3RyaW5nRm9yS2V5OkAiYW5pbWFscyJdKTsKLX0KLQotLSAodm9pZClz
ZXRJZGVudGlmaWVyOihpbnQpaWRlbnRpZmllcgotewotICAgIFtzdXBlciBzZXRJbnRlZ2VyOmlk
ZW50aWZpZXIgZm9yS2V5OkAiaWQiXTsKLX0KLQotLSAoaW50KWlkZW50aWZpZXIKLXsKLSAgICBy
ZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJpZCJdOwotfQotCi0tICh2b2lkKXNldFRyZWU6
KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICopdHJlZQotewotICAgIFtzdXBlciBz
ZXRPYmplY3Q6dHJlZSBmb3JLZXk6QCJ0cmVlIl07Ci19Ci0KLS0gKFRlc3RQcm90b2NvbFRlc3RS
ZWN1cnNpdmVPYmplY3QxICopdHJlZQotewotICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbFRlc3RS
ZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbW3N1cGVyIG9i
amVjdEZvcktleTpAInRyZWUiXSB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldOwotfQotCi1AZW5k
Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MQotCi0t
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0
cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBzZWxmLm9iaiA9IFtbVGVzdFByb3RvY29sVGVz
dFJlY3Vyc2l2ZU9iamVjdDIgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0Aib2JqIl1d
OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Ci17Ci0gICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rv
ck9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxm
OwotfQotCi0tICh2b2lkKXNldE9iajooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIg
KilvYmoKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0Om9iaiBmb3JLZXk6QCJvYmoiXTsKLX0KLQot
LSAoVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKilvYmoKLXsKLSAgICByZXR1cm4g
W1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiBhbGxvY10gaW5pdFdpdGhJbnNwZWN0
b3JPYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXSB0b0luc3BlY3Rvck9iamVjdF0u
Z2V0KCldOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0UmVj
dXJzaXZlT2JqZWN0MgotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxs
IE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBzZWxmLm9iaiA9
IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgYWxsb2NdIGluaXRXaXRoUGF5bG9h
ZDpwYXlsb2FkW0Aib2JqIl1dOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0
Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbanNv
bk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldE9iajooVGVzdFByb3RvY29sVGVz
dFJlY3Vyc2l2ZU9iamVjdDEgKilvYmoKLXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0Om9iaiBmb3JL
ZXk6QCJvYmoiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKilv
YmoKLXsKLSAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxv
Y10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXSB0
b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLWF2YWlsYWJpbGl0eS5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9t
YWluLWF2YWlsYWJpbGl0eS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmVl
MmM2MDAxODBiZTBhZTEzNTk0MGI0NDdlMTg4NzFkMjdhZWI3Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi1hdmFpbGFiaWxpdHkuanNvbgorKysgL2Rl
di9udWxsCkBAIC0xLDkgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiV2ViT25seSIsCi0gICAg
ImF2YWlsYWJpbGl0eSI6ICJ3ZWJiIiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJuYW1lIjogImVuYWJsZSIKLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtY29t
bWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBiYWI3NmNhNjI3OWNlM2E0YWNmNzk4NTUwMGIzMGI3ZDFjZmI4ZjBkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwt
cGFyYW1ldGVyLW5hbWVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi17Ci0g
ICAgImRvbWFpbiI6ICJPdmVybGF5IiwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJuYW1lIjogInByb2Nlc3NQb2ludHMiLAotICAgICAgICAgICAgInBhcmFtZXRl
cnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludCIsICJ0eXBlIjogIm51bWJl
ciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50IiwgInR5cGUiOiAibnVtYmVy
IiB9Ci0gICAgICAgICAgICBdLAotICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJyZXN1bHQxIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicmVzdWx0MiIsICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICAg
ICAgXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0
dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRl
ci1uYW1lcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGJiMTVjMDRiNjU5
YjljYjlhZmRlMzRjZDU3MjJiYTljNmQ0ZGE5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMu
anNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIk92
ZXJsYXkiLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUi
OiAicHJvY2Vzc1BvaW50cyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInBvaW50MSIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInBvaW50MiIsICJ0eXBlIjogIm51bWJlciIgfQotICAgICAgICAg
ICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicmVzdWx0IiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicmVzdWx0IiwgInR5cGUiOiAic3RyaW5nIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0K
LSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1k
dXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGQzZDNiM2NjNjQyM2NlYzI1YTY3ZGE5MTMyYTc2Njg2NzU1YTQ0NDAuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBh
cmFtZXRlci1uYW1lcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotewotICAg
ICJkb21haW4iOiAiT3ZlcmxheSIsCi0gICAgImV2ZW50cyI6IFsKLSAgICAgICAgewotICAgICAg
ICAgICAgIm5hbWUiOiAicHJvY2Vzc2VkUG9pbnRzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJz
IjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQiLCAidHlwZSI6ICJudW1iZXIi
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludCIsICJ0eXBlIjogIm51bWJlciIg
fQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRl
LXR5cGUtZGVjbGFyYXRpb25zLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzAyZmM2YTMyNzBhNjQ2YTQ1MDQ0N2ZkYzA0
MDEzOTk1YTk0MmJmMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE1
ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAotICAgICJ0eXBlcyI6IFsKLSAg
ICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKLSAgICAgICAgICAg
ICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9i
amVjdCBpZGVudGlmaWVyLiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlk
IjogIlJlbW90ZU9iamVjdElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKLSAgICAg
ICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24t
ZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGFlYmFjZWU4YjIzZTFlYTM0MDVkOGFjMGEwMDE2MjA3MDEwYzk0ODUuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVy
LW5hbWVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1bCi17Ci0gICAgImRv
bWFpbiI6ICJPdmVybGF5VHlwZXMiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAg
ICAgICAgImlkIjogIlBvaW50IiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAg
ICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIngiLCAi
dHlwZSI6ICJpbnRlZ2VyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAieCIsICJ0eXBl
IjogImludGVnZXIiIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9m
YWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMyYTdjMzI0OWE0MGJkNDQ3ZTE5YTkyYThl
NTY5MzBkM2Y4NTk1Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBA
Ci17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7
Ci0gICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCi0gICAgICAgICAgICAidHlwZSI6
ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBbXQotICAgICAgICB9Ci0gICAgXQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1udW1iZXIt
dHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNzMwOGRiOTkyZDY1MjU3ZjJiNWM2MzI3ZTBjYTM1NDUwMmQ2MTU0YS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9u
YWwtcGFyYW1ldGVyLWZsYWcuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLXsK
LSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmlu
ZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0
YWJhc2Ugb2JqZWN0LiIKLSAgICAgICAgfQotICAgIF0sCi0gICAgImV2ZW50cyI6IFsKLSAgICAg
ICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIs
Ci0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImNvbHVtbk5hbWVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogMCB9Ci0gICAgICAg
ICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9u
YWwtdHlwZS1tZW1iZXIuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29u
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmVhNTU1ZWM0ZmUwODY2Mjc4ZTFmY2Q3
MzM1NDI0MmRlZmQxYmQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uCisrKyAvZGV2L251bGwK
QEAgLTEsMTYgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJ0
eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkVycm9yIiwKLSAgICAgICAg
ICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJh
c2UgZXJyb3IuIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJF
cnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlw
ZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiwgIm9wdGlvbmFsIjog
MCB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJp
bmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25h
bC1wYXJhbWV0ZXItZmxhZy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDEy
Yzc5YjZiMzhjMjFkZmY2MDdmZWM5ZWU5MGIyODAzMTBmOTA4Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXIt
ZmxhZy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotewotICAgICJkb21haW4i
OiAiRGF0YWJhc2UiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlk
IjogIkRhdGFiYXNlSWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3Qu
IgotICAgICAgICB9Ci0gICAgXSwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAg
ICAgICAibmFtZSI6ICJkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwKLSAgICAgICAgICAg
ICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMi
LCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiAidHJ1ZSIgfQotICAgICAgICAgICAgXQot
ICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUt
bWVtYmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2EzZWYyOGE4Zjg4MTRjYzYxN2ZiNWQ1YmMyMTMwNmQw
YWFkNGZkMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJp
bmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE2
ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBb
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCi0gICAgICAgICAgICAidHlw
ZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9y
LiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVz
c2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50
ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIsICJvcHRpb25hbCI6ICJmYWxzZSIg
fQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1k
ZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2lu
Zy10eXBlLXJlZmVyZW5jZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWI3
NTkwY2NjNmY2YmMzNDQzYTRhMjgzY2E2ZmNjZmRmMzI3NzM0Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZl
cmVuY2UuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLVsKLXsKLSAgICAiZG9t
YWluIjogIlJ1bnRpbWUiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAg
ImlkIjogIlJlbW90ZU9iamVjdElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0g
ICAgICAgICAgICAiJHJlZiI6ICJTb21lVHlwZSIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9m
YWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXJlZmVyZW5j
ZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
YzgzYmJmY2U0MTJiOGIwOWRmNzQ3YTg3NWU4MDM2ZGZlY2NiYzM2Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10
eXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6
ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQi
OiAiRGF0YWJhc2VJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4i
Ci0gICAgICAgIH0KLSAgICBdLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAotICAgICAgICAgICAg
InBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIs
ICJ0eXBlIjogIkRhdGFiYXNlSWQiIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS13aXRoLWxvd2Vy
Y2FzZS1uYW1lLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzMTkwMWU0YTlh
ZDk5MzZiMDFiYmFlZDk3YTFkNGRhMzQ4NDc4YjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24KKysrIC9kZXYv
bnVsbApAQCAtMSwxMCArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAg
InR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiZGF0YWJhc2VJZCIsCi0g
ICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgotICAgICAgICB9Ci0gICAg
XQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9u
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY4ODdhMjc0MTE5MDBhODBkNTBmMDAzZWFjMzZj
MTNhOTlmYWU1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11
bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbgorKysgL2Rldi9u
dWxsCkBAIC0xLDEyICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAotICAg
ICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElk
IiwKLSAgICAgICAgICAgICJ0eXBlIjogImRyYWdvbiIsCi0gICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKLSAgICAgICAgfQotICAgIF0KLX0KLV0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25v
d24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYjgxN2RiNTA0NGRjMWYyODU1NzAwOGMxZjE3NjFmMWIwNjhmNGNlNi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVm
ZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBA
Ci1bCi17Ci0gICAgImRvbWFpbiI6ICJGYW50YXN5IiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJpZCI6ICJEcmFnb25FZ2ciLAotICAgICAgICAgICAgInR5cGUiOiAi
b2JqZWN0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIGRyYWdvbiBlZ2cuIiwKLSAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29s
b3IiLCAiJHJlZiI6ICJDb2xvciIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQot
fQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyYXRlLWRvbWFpbnMt
d2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
N2NmOGU1ODJmNjVhZTZmYzYxNTY5Mjg4MmNiMGY2NTc0NjAxMDhhLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMu
anNvbgorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjog
Ik5ldHdvcmsxIiwKLSAgICAiZmVhdHVyZUd1YXJkIjogIlBMQVRGT1JNKFdFQl9DT01NQU5EUyki
LAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9h
ZFJlc291cmNlIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNl
IGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQg
Y3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0KLSAgICBdCi19LAotewotICAgICJkb21h
aW4iOiAiTmV0d29yazIiLAotICAgICJmZWF0dXJlR3VhcmQiOiAiUExBVEZPUk0oV0VCX1RZUEVT
KSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiTmV0d29y
a0Vycm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJv
cGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6
ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6
ICJFcnJvciBjb2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfSwKLXsK
LSAgICAiZG9tYWluIjogIk5ldHdvcmszIiwKLSAgICAiZmVhdHVyZUd1YXJkIjogIlBMQVRGT1JN
KFdFQl9FVkVOVFMpIiwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAi
bmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBy
ZXNvdXJjZSB3YXMgbG9hZGVkLiIKLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Nv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjExMjYyZTg4OWZhNWJkMGI0YWU1N2U1ZjdmMWJhYzZjZmYz
ZmU5MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29u
CkBAIC0wLDAgKzEsMTA5IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5
cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisgICAg
ICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJV
bmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9LAorICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAgICAidHlw
ZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbInJlZCIsICJncmVlbiIsICJibHVl
Il0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkNvbG9yTGlzdCIs
CisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICIk
cmVmIjogIlByaW1hcnlDb2xvcnMiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9w
ZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjog
InN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjog
IkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJj
b21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlk
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmci
IH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwi
OiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIi
LCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMi
LCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNl
SWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxF
cnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29s
b3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjog
WyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUg
fQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFt
ZSI6ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsCisgICAgICAgICAgICAi
YXN5bmMiOiB0cnVlLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAg
ICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0
ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
Im5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAi
b2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJl
ZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVm
IjogIkNvbG9yTGlzdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJt
YWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAg
ICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0
ZVNRTFN5bmMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAg
ICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJp
bmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3Ry
aW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAi
bnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAi
b2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjog
ImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6
ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAi
JHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNv
bG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lh
biIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KKyAgICAgICAgICAgIF0KKyAgICAg
ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZVNRTEFzeW5jIiwK
KyAgICAgICAgICAgICJhc3luYyI6IHRydWUsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFz
ZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJp
bmciIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMi
OiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90
ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1l
c3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2
YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
YXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0
YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmlu
ZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQorICAg
ICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvY29tbWFuZHMtd2l0aC1v
cHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kcy13aXRoLW9wdGlvbmFs
LWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNjFkNTdkODIwZGU5MTZh
NzNjYmRkOTgzODNkMTI2NDIwMzk4ZjRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvY29tbWFuZHMtd2l0aC1v
cHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KQEAgLTAsMCArMSw4NSBAQAorewor
ICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdl
ciIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0
YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
IlByaW1hcnlDb2xvcnMiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAg
ICAgICJlbnVtIjogWyJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJDb2xvckxpc3QiLAorICAgICAgICAgICAgInR5cGUiOiAi
YXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9
CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCisgICAg
ICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRh
dGFiYXNlIGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24i
OiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwg
InR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQorICAgICAg
ICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiLAorICAg
ICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1
bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAi
dHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwg
InR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0Iiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIs
ICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJv
ciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVl
bkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9y
TGlzdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBy
aW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwg
InllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0sCisg
ICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVt
bk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0
eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAi
dHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwg
InR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9y
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVu
Q29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JM
aXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJp
bnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAi
eWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAi
dHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwg
InR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1w
IiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVz
IiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9h
ZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNl
SWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
c3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KKyAgICAgICAg
ICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0
cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJz
dHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6
ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6
ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUi
OiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVm
IjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIs
ICIkcmVmIjogIkVycm9yIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29s
b3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJj
eWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQorICAgICAgICAgICAgXQorICAg
ICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODE3ZjEz
NWVlNWE3MjA5N2FlM2UxMzFiZGQ0MGU2MDE2OThhYjEwYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2RlZmlu
aXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KQEAgLTAsMCArMSwyOCBAQAoreworICAgICJk
b21haW4iOiAiTmV0d29yayIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiTmV0d29ya0Vycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisg
ICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMi
OiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5n
IiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3Ig
Y29kZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbW1hbmRz
IjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UiLAorICAg
ICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3Bl
Y3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0KKyAgICBd
LAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInJlc291
cmNlTG9hZGVkIiwKKyAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCisgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiQSByZXNvdXJjZSB3YXMgbG9hZGVkLiIKKyAgICAgICAgfQorICAg
IF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Rv
bWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NGE4ZWNi
MTc2ZDNiOGVjOWJmOTY2NzZlNjNjZWEwNTE0NjZiODY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWlu
cy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCkBAIC0wLDAgKzEsNTQgQEAKK1sKK3sK
KyAgICAiZG9tYWluIjogIk5ldHdvcmsxIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTEiLAorICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0
aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAg
fQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMiIsCisgICAgInR5cGVzIjog
WworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTG9hZGVySWQiLAorICAgICAgICAgICAg
InR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgbG9h
ZGVyIGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjog
Ik5ldHdvcmszIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJu
YW1lIjogImxvYWRSZXNvdXJjZTEiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRz
IGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBh
Z2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMiIsCisgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRo
ZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9
LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UzIiwKKyAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9m
IGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNr
cy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNv
dXJjZTQiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4g
dGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9z
cyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5h
bWUiOiAibG9hZFJlc291cmNlNSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMg
YSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFn
ZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U2IiwKKyAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhl
IGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTciLAorICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2Yg
YSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tz
LiIKKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2VudW0tdmFsdWVzLmpzb24gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9lbnVt
LXZhbHVlcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkYWQ2MWRmN2M5ZjljNzZlNjkyODk3YzNkZmUwYjA4
MjNmOTBlNGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9lbnVtLXZhbHVlcy5qc29uCkBAIC0wLDAgKzEsMzUg
QEAKK3siZG9tYWlucyI6WworeworICAgICJkb21haW4iOiAiVHlwZURvbWFpbiIsCisgICAgInR5
cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVHlwZURvbWFpbkVudW0iLAor
ICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJzaGFy
ZWQiLCAicmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAg
ICAiZG9tYWluIjogIkNvbW1hbmREb21haW4iLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAg
eworICAgICAgICAgICAgIm5hbWUiOiAiY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiLAorICAg
ICAgICAgICAgInBhcmFtZXRlcnMiOiBbXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicmV0dXJuVmFsdWUiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZW51bSI6IFsic2hhcmVkIiwgImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciXSB9CisgICAgICAg
ICAgICBdCisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4iOiAiRXZlbnREb21h
aW4iLAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV2
ZW50V2l0aEVudW1QYXJhbWV0ZXIiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJwYXJhbWV0ZXIiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51
bSI6IFsic2hhcmVkIiwgImJsYWNrIiwgIndoaXRlIl0gfQorICAgICAgICAgICAgXQorICAgICAg
ICB9CisgICAgXQorfQorXX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRl
cnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
YWJiZjEwYjgzNmY5ZmY3Y2Q5OTI1ZGI0ZDZiNDFjNWRmYTg3YjQ4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCkBAIC0wLDAgKzEsNTkgQEAKK3sK
KyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmlu
ZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0
YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
IlByaW1hcnlDb2xvcnMiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAg
ICAgICJ2YWx1ZXMiOiBbInJlZCIsICJncmVlbiIsICJibHVlIl0KKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgImlkIjogIkNvbG9yTGlzdCIsCisgICAgICAgICAgICAidHlwZSI6
ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIlByaW1hcnlDb2xvcnMi
IH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkVycm9yIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
RGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlv
biI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUi
LCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAg
ICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAorICAg
ICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1
bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAi
dHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwg
InR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0Iiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIs
ICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlD
b2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJh
bHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5n
IiwgInZhbHVlcyI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0
aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAg
ICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1u
TmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmlt
YXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3Jz
IiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJp
bnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJ2YWx1ZXMiOiBbImN5YW4iLCAibWFnZW50YSIs
ICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmE4NzA4MzQ5ZTQyZDU2N2UyYzg4N2RiOWUwYzc3YzgzODZmMzQ2NWIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJl
c3VsdApAQCAtMCwwICsxLDE3NTIgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5k
Q29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKy8vIERhdGFiYXNlLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRhdGFi
YXNlRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVy
LmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRhdGFiYXNlIik7CitJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRW51bSgiRGF0YWJhc2UuUHJpbWFyeUNvbG9ycyIsIHtSZWQ6ICJyZWQiLCBHcmVlbjog
ImdyZWVuIiwgQmx1ZTogImJsdWUifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFu
ZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsIFt7Im5hbWUi
OiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJu
YW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogZmFsc2V9XSwgWyJj
b2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAi
ZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMi
LCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRh
YmFzZS5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsIFt7Im5hbWUiOiAiZGF0
YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjog
InF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogZmFsc2V9XSwgWyJjb2x1bW5O
YW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJh
c2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJp
bnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5l
eGVjdXRlU1FMU3luYyIsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciIs
ICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiwg
Im9wdGlvbmFsIjogZmFsc2V9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAi
LCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJhbHRlcm5h
dGVDb2xvcnMiLCAic2NyZWVuQ29sb3IiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMiLCBbeyJuYW1lIjog
ImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFt
ZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNlfV0sIFsiY29s
dW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRh
dGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwg
InByaW50Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFz
ZSIpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRj
aGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERp
c3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIq
IGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5n
ZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2Vu
ZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAg
IHZpcnR1YWwgfkFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJ
ZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxs
SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJ
ZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRl
U1FMQXN5bmMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGlu
X3F1ZXJ5KSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcjsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKworY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVi
bGljOgorICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncHJpbnRDb2xvcicgd2hpbGUgZ2Vu
ZXJhdGluZyBjb21tYW5kL2V2ZW50IGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMu
CisgICAgZW51bSBjbGFzcyBQcmludENvbG9yIHsKKyAgICAgICAgQ3lhbiA9IDMsCisgICAgICAg
IE1hZ2VudGEgPSA0LAorICAgICAgICBZZWxsb3cgPSA1LAorICAgICAgICBCbGFjayA9IDYsCisg
ICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENvbG9yCisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVT
UUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJ
ZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpP
cHRPdXRwdXQ8U3RyaW5nPiogb3B0X291dF9ub3RlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0
T3V0cHV0PGRvdWJsZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3RvY29sOjpP
cHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvcHRfb3V0X3ZhbHVlcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBv
cHRfb3V0X3BheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBvcHRf
b3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xv
cikgPSAwOworICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2Fs
bGJhY2sgOiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CisgICAgcHVi
bGljOgorICAgICAgICBFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNr
KFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKKyAgICAgICAgdm9pZCBzZW5kU3Vj
Y2VzcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mJiBjb2x1bW5O
YW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIG5vdGVzLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiogdGltZXN0YW1wLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiB2YWx1ZXMs
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVl
PiogcGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIGRhdGFiYXNl
SWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJy
b3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBzY3JlZW5Db2xvciwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJu
YXRlQ29sb3JzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogcHJpbnRD
b2xvcik7CisgICAgfTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5n
JiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJh
Y2s+JiYgY2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMoRXJy
b3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMs
IFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0KiBvdXRfdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBvdXRf
cGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3Ip
ID0gMDsKKyAgICBjbGFzcyBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayA6IHB1YmxpYyBCYWNrZW5k
RGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEV4ZWN1dGVT
UUxBc3luY0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKKyAgICAg
ICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFt
cCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QgdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9y
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRl
cm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcik7CisgICAgfTsKKyAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQs
IGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZjxFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4mJiBj
YWxsYmFjaykgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
IGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5k
RGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9p
ZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIHZvaWQgZXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBleGVjdXRl
U1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1l
dGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitwdWJs
aWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07
CisjZW5kaWYKK3ByaXZhdGU6CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0
cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK0Rh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIoKSB7IH0KKworUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3Bh
dGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNw
YXRjaGVyLCBhZ2VudCkpOworfQorCitEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFn
ZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRv
bWFpbihBU0NJSUxpdGVyYWwoIkRhdGFiYXNlIiksIHRoaXMpOworfQorCit2b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0
ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpCisgICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBl
bHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikK
KyAgICAgICAgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxT
eW5jIikKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpKTsKKyAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxBc3luYyIpCisgICAgICAg
IGV4ZWN1dGVTUUxBc3luYyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGVs
c2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIkRhdGFiYXNl
IiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKQoreworICAg
IGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJh
bWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0cik7CisgICAg
U3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRl
cnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0cik7CisgICAgaWYgKG1fYmFj
a2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxp
ZFBhcmFtcywgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNh
bid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikg
eworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1bW5O
YW1lczsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiBvdXRfbm90
ZXM7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4gb3V0X3RpbWVz
dGFtcDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+IG91dF92YWx1ZXM7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0
cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IG91dF9wYXlsb2FkOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RGF0
YWJhc2VJZD4gb3V0X2RhdGFiYXNlSWQ7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9y
czsKKyAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRf
cHJpbnRDb2xvcjsKKyAgICBtX2FnZW50LT5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0
X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2Rh
dGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5Db2xvciwgb3V0X2FsdGVybmF0ZUNv
bG9ycywgJm91dF9wcmludENvbG9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAg
ICAgICAgaWYgKG91dF9jb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXko
QVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBvdXRfY29sdW1uTmFtZXMpOworICAgICAgICBp
ZiAob3V0X25vdGVzLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgb3V0X25vdGVzLmdldFZhbHVlKCkpOworICAgICAgICBp
ZiAob3V0X3RpbWVzdGFtcC5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldERv
dWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCBvdXRfdGltZXN0YW1wLmdldFZhbHVlKCkp
OworICAgICAgICBpZiAob3V0X3ZhbHVlcy5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1
bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBvdXRfdmFsdWVzLmdldFZhbHVl
KCkpOworICAgICAgICBpZiAob3V0X3BheWxvYWQuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAg
cmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgb3V0X3BheWxvYWQuZ2V0
VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfZGF0YWJhc2VJZC5pc0Fzc2lnbmVkKCkpCisgICAg
ICAgICAgICByZXN1bHQtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG91
dF9kYXRhYmFzZUlkLmdldFZhbHVlKCkpOworICAgICAgICBpZiAob3V0X3NxbEVycm9yKQorICAg
ICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBvdXRf
c3FsRXJyb3IpOworICAgICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmlzQXNzaWduZWQoKSkKKyAg
ICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwg
b3V0X3NjcmVlbkNvbG9yLmdldFZhbHVlKCkpOworICAgICAgICBpZiAob3V0X2FsdGVybmF0ZUNv
bG9ycykKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5h
dGVDb2xvcnMiKSwgb3V0X2FsdGVybmF0ZUNvbG9ycyk7CisgICAgICAgIGlmIChvdXRfcHJpbnRD
b2xvci5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxp
dGVyYWwoInByaW50Q29sb3IiKSwgb3V0X3ByaW50Q29sb3IuZ2V0VmFsdWUoKSk7CisgICAgfQor
ICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSk7CisgICAgZWxzZQorICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworfQorCitEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxs
YmFjazo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhSZWY8QmFj
a2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBCYWNrZW5kRGlz
cGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURk1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9
CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogbm90ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9w
dE91dHB1dDxkb3VibGU+KiB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1
dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIHZhbHVlcywgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBwYXlsb2FkLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50PiogZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90
b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKQoreworICAgIFJlZjxJ
bnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheShBU0NJ
SUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGNvbHVtbk5hbWVzKTsKKyAgICBpZiAobm90ZXMuaXNB
c3NpZ25lZCgpKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
bm90ZXMiKSwgbm90ZXMuZ2V0VmFsdWUoKSk7CisgICAgaWYgKHRpbWVzdGFtcC5pc0Fzc2lnbmVk
KCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3Rh
bXAiKSwgdGltZXN0YW1wLmdldFZhbHVlKCkpOworICAgIGlmICh2YWx1ZXMuaXNBc3NpZ25lZCgp
KQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiks
IHZhbHVlcy5nZXRWYWx1ZSgpKTsKKyAgICBpZiAocGF5bG9hZC5pc0Fzc2lnbmVkKCkpCisgICAg
ICAgIGpzb25NZXNzYWdlLT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgcGF5bG9h
ZC5nZXRWYWx1ZSgpKTsKKyAgICBpZiAoZGF0YWJhc2VJZC5pc0Fzc2lnbmVkKCkpCisgICAgICAg
IGpzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBkYXRh
YmFzZUlkLmdldFZhbHVlKCkpOworICAgIGlmIChzcWxFcnJvcikKKyAgICAgICAganNvbk1lc3Nh
Z2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIHNxbEVycm9yKTsKKyAgICBp
ZiAoc2NyZWVuQ29sb3IuaXNBc3NpZ25lZCgpKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgc2NyZWVuQ29sb3IuZ2V0VmFsdWUoKSk7
CisgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldEFycmF5
KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIGFsdGVybmF0ZUNvbG9ycyk7CisgICAg
aWYgKHByaW50Q29sb3IuaXNBc3NpZ25lZCgpKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBwcmludENvbG9yLmdldFZhbHVlKCkpOwor
ICAgIENhbGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOworfQor
Cit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBh
cmFtZXRlcnMpCit7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIp
LCBudWxscHRyKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRy
KTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMg
b2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwg
aW5fcXVlcnkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBFcnJvclN0
cmluZyBlcnJvcjsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4gY2FsbGJhY2sg
PSBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIu
Y29weVJlZigpLCByZXF1ZXN0SWQpKTsKKyAgICBtX2FnZW50LT5leGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyhlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNr
LmNvcHlSZWYoKSk7CisKKyAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgY2FsbGJh
Y2stPmRpc2FibGUoKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVj
dXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJh
bWV0ZXJzKQoreworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+
Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwg
bnVsbHB0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0cik7
CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9m
IG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMU3lu
YyIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luYyhyZXF1ZXN0SWQsIGlu
X2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgor
CisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOworICAgIFN0cmluZyBvdXRfbm90
ZXM7CisgICAgZG91YmxlIG91dF90aW1lc3RhbXA7CisgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Qgb3V0X3ZhbHVlczsKKyAgICBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIG91dF9wYXls
b2FkOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpEYXRhYmFzZUlkIG91dF9k
YXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IG91dF9zcWxFcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Cisg
ICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5
LCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVz
LCAmb3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCBvdXRfYWx0ZXJu
YXRlQ29sb3JzLCAmb3V0X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOworCisgICAgaWYg
KCFlcnJvci5sZW5ndGgoKSkgeworICAgICAgICByZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJh
bCgiY29sdW1uTmFtZXMiKSwgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBvdXRfbm90ZXMpOworICAgICAgICByZXN1bHQt
PnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCBvdXRfdGltZXN0YW1wKTsKKyAg
ICAgICAgcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgb3V0X3ZhbHVl
cyk7CisgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIG91
dF9wYXlsb2FkKTsKKyAgICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiZGF0
YWJhc2VJZCIpLCBvdXRfZGF0YWJhc2VJZCk7CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgb3V0X3NxbEVycm9yKTsKKyAgICAgICAgcmVzdWx0LT5z
ZXRBcnJheShBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBvdXRfYWx0ZXJuYXRlQ29s
b3JzKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xv
ciIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFs
dWUob3V0X3NjcmVlbkNvbG9yKSk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgicHJpbnRDb2xvciIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0
RW51bUNvbnN0YW50VmFsdWUob3V0X3ByaW50Q29sb3IpKTsKKyAgICB9CisgICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJl
cXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK0RhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2soUmVm
PEJhY2tlbmREaXNwYXRjaGVyPiYmIGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2Vu
ZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShXVEZNb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQp
IHsgfQorCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FM
QXN5bmNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0
aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IHZhbHVlcywgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3Jl
ZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+
JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpCit7CisgICAgUmVm
PEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OworICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiks
IGNvbHVtbk5hbWVzKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
bm90ZXMiKSwgbm90ZXMpOworICAgIGpzb25NZXNzYWdlLT5zZXREb3VibGUoQVNDSUlMaXRlcmFs
KCJ0aW1lc3RhbXAiKSwgdGltZXN0YW1wKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgidmFsdWVzIiksIHZhbHVlcyk7CisgICAganNvbk1lc3NhZ2UtPnNldFZhbHVl
KEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBwYXlsb2FkKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0
SW50ZWdlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgZGF0YWJhc2VJZCk7CisgICAganNv
bk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIHNxbEVycm9yKTsK
KyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHNj
cmVlbkNvbG9yKSk7CisgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0
ZXJuYXRlQ29sb3JzIiksIGFsdGVybmF0ZUNvbG9ycyk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHByaW50Q29sb3IpKTsKKyAgICBDYWxsYmFj
a0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2UpKTsKK30KKwordm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycykKK3sKKyAgICBpbnQgaW5fZGF0YWJh
c2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwg
QVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIpOworICAgIFN0cmluZyBpbl9xdWVy
eSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJ
SUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIpOworICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVy
LT5oYXNQcm90b2NvbEVycm9ycygpKSB7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIFN0cmlu
Zzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNz
ZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jIikpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYg
KG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXIt
PmV4ZWN1dGVTUUxBc3luYyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7Cisg
ICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxB
c3luY0NhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNo
ZXIuY29weVJlZigpLCByZXF1ZXN0SWQpKTsKKyAgICBtX2FnZW50LT5leGVjdXRlU1FMQXN5bmMo
ZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBjYWxsYmFjay5jb3B5UmVmKCkpOworCisg
ICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIGNhbGxiYWNrLT5kaXNhYmxlKCk7Cisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3lu
Yy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJv
dXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
YXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Cisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKwor
CituYW1lc3BhY2UgUHJvdG9jb2wgeworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVz
cGFjZSBEYXRhYmFzZSB7CitjbGFzcyBFcnJvcjsKK2VudW0gY2xhc3MgUHJpbWFyeUNvbG9yczsK
K30gLy8gRGF0YWJhc2UKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBU
eXBlZGVmcy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiBVbmlxdWUgaWRlbnRpZmllciBvZiBE
YXRhYmFzZSBvYmplY3QuICovCit0eXBlZGVmIGludCBEYXRhYmFzZUlkOwordHlwZWRlZiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycz4gQ29sb3JMaXN0OworfSAvLyBEYXRhYmFzZQorLy8gRW5kIG9mIHR5cGVkZWZz
LgorCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFs
dWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0
YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVl
KHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzCisKK25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiAgKi8KK2VudW0gY2xhc3MgUHJpbWFy
eUNvbG9ycyB7CisgICAgUmVkID0gMCwKKyAgICBHcmVlbiA9IDEsCisgICAgQmx1ZSA9IDIsCit9
OyAvLyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKKy8qIERhdGFiYXNlIGVycm9yLiAqLworY2xh
c3MgRXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1Ymxp
YzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdl
U2V0ID0gMSA8PCAwLAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9JbnNwZWN0b3JP
YmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRz
U2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwg
cHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxy
ZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoQVNDSUlMaXRlcmFs
KCJjb2RlIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4o
KTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0
X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3Ip
ID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7
CisgICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+
Kj4oJnJlc3VsdCkpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0
ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4u
KQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gRGF0
YWJhc2UKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFByb3RvY29sRW51bVR5cGU+CitzdGQ6Om9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKKworLy8gRW51bXMgaW4gdGhlICdE
YXRhYmFzZScgRG9tYWluCit0ZW1wbGF0ZTw+CitzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmlu
ZyYpOworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCit9IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0
cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKwor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKK25hbWVz
cGFjZSBUZXN0SGVscGVycyB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0
YW50X3ZhbHVlc1tdID0geworICAgICJyZWQiLAorICAgICJncmVlbiIsCisgICAgImJsdWUiLAor
ICAgICJjeWFuIiwKKyAgICAibWFnZW50YSIsCisgICAgInllbGxvdyIsCisgICAgImJsYWNrIiwK
K307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVy
biBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4gdGhlICdEYXRh
YmFzZScgRG9tYWluCit0ZW1wbGF0ZTw+CitzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVl
c1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzOjpSZWQsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkdyZWVuLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpCbHVlLAorICAgIH07CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmlu
ZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAg
ICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKWNv
bnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworCit9IC8v
IG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3lu
Yy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgVGVz
dFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworCitjbGFzcyBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6
IHB1YmxpYyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAg
ICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xE
YXRhYmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25n
IHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5f
cXVlcnkpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHJl
cXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIGlu
dCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBvdmVycmlkZTsKK3ByaXZh
dGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4+
IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0
SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQoreworICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4o
TlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRv
dWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMg
KnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50
Q29sb3IgKnByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVz
Iik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihu
b3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05B
TF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJz
cWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJB
TUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICBpZiAo
Y29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0
ZXJhbCgiY29sdW1uTmFtZXMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7
CisgICAgICAgIGlmIChub3RlcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgKm5vdGVzKTsKKyAgICAgICAgaWYgKHRpbWVzdGFtcCkK
KyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0
YW1wIiksICp0aW1lc3RhbXApOworICAgICAgICBpZiAodmFsdWVzKQorICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgWyp2YWx1ZXMgdG9J
bnNwZWN0b3JPYmplY3RdKTsKKyAgICAgICAgaWYgKHBheWxvYWQpCisgICAgICAgICAgICByZXN1
bHRPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBbKnBheWxvYWQgdG9J
bnNwZWN0b3JPYmplY3RdKTsKKyAgICAgICAgaWYgKGRhdGFiYXNlSWQpCisgICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksICpkYXRh
YmFzZUlkKTsKKyAgICAgICAgaWYgKHNxbEVycm9yKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBbKnNxbEVycm9yIHRvSW5zcGVj
dG9yT2JqZWN0XSk7CisgICAgICAgIGlmIChzY3JlZW5Db2xvcikKKyAgICAgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgdG9Qcm90b2Nv
bFN0cmluZygqc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKKyAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVD
b2xvcnMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOworICAgICAg
ICBpZiAocHJpbnRDb2xvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFT
Q0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocmVzdWx0T2JqZWN0KSk7CisgICAgfTsKKworICAgIGludCBvX2luX2RhdGFiYXNlSWQg
PSBpbl9kYXRhYmFzZUlkOworICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7CisK
KyAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVy
cm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
IGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOworfQorCit2b2lk
IE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgaW5fcXVlcnkpCit7CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJp
bmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9
OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipj
b2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwg
aW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKKyAg
ICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZh
bHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVU
RVIocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBA
ImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAgICAg
ICByZXN1bHRPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgaW5z
cGVjdG9yU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7CisgICAgICAgIGlmIChub3RlcykKKyAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwg
Km5vdGVzKTsKKyAgICAgICAgaWYgKHRpbWVzdGFtcCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksICp0aW1lc3RhbXApOworICAg
ICAgICBpZiAodmFsdWVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJ2YWx1ZXMiKSwgWyp2YWx1ZXMgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICAg
ICAgaWYgKHBheWxvYWQpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKEFTQ0lJ
TGl0ZXJhbCgicGF5bG9hZCIpLCBbKnBheWxvYWQgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICAg
ICAgaWYgKGRhdGFiYXNlSWQpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIo
QVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksICpkYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKHNx
bEVycm9yKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJzcWxFcnJvciIpLCBbKnNxbEVycm9yIHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgICAgIGlm
IChzY3JlZW5Db2xvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsK
KyAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgaW5zcGVjdG9yU3RyaW5n
QXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBpZiAocHJpbnRDb2xvcikKKyAgICAg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIp
LCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSk7Cisg
ICAgfTsKKworICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOworICAgIE5T
U3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7CisKKyAgICBbbV9kZWxlZ2F0ZSBleGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJh
c2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9k
YXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQoreworICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJy
b3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5T
U3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1w
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpw
YXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJy
b3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTFN5bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAi
Y29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJB
TUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJy
b3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0
ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICByZXN1bHRPYmplY3Qt
PnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgaW5zcGVjdG9yU3RyaW5nQXJy
YXkoY29sdW1uTmFtZXMpKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91Ymxl
KEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHRpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIFt2YWx1ZXMgdG9JbnNwZWN0
b3JPYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwo
InBheWxvYWQiKSwgW3BheWxvYWQgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBkYXRhYmFzZUlk
KTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJv
ciIpLCBbc3FsRXJyb3IgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBpbnNwZWN0b3JTdHJp
bmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNv
bG9yKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJp
bnRDb2xvciIpLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmpl
Y3QpKTsKKyAgICB9OworCisgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7
CisgICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKKworICAgIFttX2RlbGVnYXRl
IGV4ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9f
aW5fcXVlcnldOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBj
b25zdCBTdHJpbmcmIGluX3F1ZXJ5KQoreworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3Ry
aW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAg
fTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpj
b2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQg
ZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5n
PiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5j
UHJpbnRDb2xvciBwcmludENvbG9yKSB7CisgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVz
Iik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVz
LCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9y
cywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheShB
U0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KGNvbHVtbk5h
bWVzKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90
ZXMiKSwgbm90ZXMpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZShBU0NJSUxpdGVy
YWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOworICAgICAgICByZXN1bHRPYmplY3QtPnNldE9i
amVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBbdmFsdWVzIHRvSW5zcGVjdG9yT2JqZWN0XSk7
CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiks
IFtwYXlsb2FkIHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
SW50ZWdlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgZGF0YWJhc2VJZCk7CisgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgW3NxbEVy
cm9yIHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xv
cikpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJu
YXRlQ29sb3JzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOworICAg
ICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwg
dG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSk7CisgICAg
fTsKKworICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOworICAgIE5TU3Ry
aW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7CisKKyAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FM
QXN5bmNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNj
ZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07
Cit9CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4K
KworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMs
IHJldGFpbiwgc2V0dGVyPXNldERhdGFiYXNlSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERhdGFi
YXNlRG9tYWluSGFuZGxlcj4gZGF0YWJhc2VIYW5kbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Y29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9j
b250cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gX2Rh
dGFiYXNlSGFuZGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjoo
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
QVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19kYXRhYmFzZUhhbmRs
ZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldERhdGFi
YXNlSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiloYW5kbGVy
Cit7CisgICAgaWYgKGhhbmRsZXIgPT0gX2RhdGFiYXNlSGFuZGxlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgW19kYXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07CisgICAgX2RhdGFiYXNlSGFuZGxl
ciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiho
YW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5h
dGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPj4oQVNDSUlMaXRlcmFsKCJEYXRhYmFzZSIpLCAq
X2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250cm9s
bGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAo
aWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPilkYXRhYmFzZUhhbmRsZXIKK3sK
KyAgICByZXR1cm4gX2RhdGFiYXNlSGFuZGxlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCit1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
RXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3I7CisKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJh
c2VQcmltYXJ5Q29sb3JzKSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
UmVkLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuLAorICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWUsCit9OworCit0eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNQcmludENvbG9yKSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW4sCisgICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1h
Z2VudGEsCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdywKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2ssCit9OworCit0eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbiwKKyAg
ICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
UHJpbnRDb2xvck1hZ2VudGEsCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFj
aywKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNQcmludENvbG9yKSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMU3luY1ByaW50Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTFN5bmNQcmludENvbG9yTWFnZW50YSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxTeW5jUHJpbnRDb2xvclllbGxvdywKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNrLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdl
ciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yKSB7CisgICAg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQ3lhbiwKKyAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JNYWdlbnRhLAorICAg
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvclllbGxvdywKKyAg
ICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JCbGFjaywKK307
CisKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4g
KilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3Nh
Z2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKKy8qIHJlcXVpcmVkICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKKy8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOworQGVuZAorCitAcHJv
dG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0ByZXF1
aXJlZAorLSAodm9pZClleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9y
Q2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNT
dHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlk
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFs
dGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFi
YXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OworLSAodm9pZCll
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOih2b2lk
KF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQo
XikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMs
IGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQ
cmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRh
dGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxTeW5j
V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNr
IHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5h
bWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFz
ZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgTlNBcnJheS8qPE5TU3Ry
aW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9y
cyBzY3JlZW5Db2xvciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29s
b3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlk
IHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OworLSAodm9pZClleGVjdXRlU1FMQXN5bmNXaXRoRXJy
b3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5T
U3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2
YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRl
Q29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IgcHJp
bnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5
OihOU1N0cmluZyAqKXF1ZXJ5OworQGVuZAorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
LmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCisKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4K
K09iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisK
KworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9ycyB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0
ZXJhbCgicmVkIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNH
cmVlbjoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiZ3JlZW4iKTsKKyAgICBjYXNlIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU6CisgICAgICAgIHJldHVybiBBU0NJ
SUxpdGVyYWwoImJsdWUiKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJyZWQiKQorICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOworICAgIGlmICh2YWx1ZSA9PSAiZ3Jl
ZW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3Jl
ZW47CisgICAgaWYgKHZhbHVlID09ICJibHVlIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDsKK30KKworaW5s
aW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAgc3dpdGNo
KHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0
ZXJhbCgiY3lhbiIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE6CisgICAgICAgIHJldHVybiBB
U0NJSUxpdGVyYWwoIm1hZ2VudGEiKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoInllbGxvdyIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOgor
ICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJibGFjayIpOworICAgIH0KK30KKwordGVtcGxh
dGU8PgoraW5saW5lIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1ByaW50Q29sb3IgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWUpCit7CisgICAgaWYgKHZhbHVlID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JD
eWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
TWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENv
bG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRD
b2xvckJsYWNrOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
Q3lhbjsKK30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yIHZhbHVl
KQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOgorICAgICAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsKCJjeWFuIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE6
CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIm1hZ2VudGEiKTsKKyAgICBjYXNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENv
bG9yWWVsbG93OgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ5ZWxsb3ciKTsKKyAgICBj
YXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImJsYWNrIik7
CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJjeWFuIikKKyAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEiKQor
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93
IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxh
Y2siKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazsKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJv
dG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3Ig
dmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiBBU0NJSUxp
dGVyYWwoImN5YW4iKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5
bmNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgibWFnZW50
YSIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29s
b3JZZWxsb3c6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInllbGxvdyIpOworICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JCbGFjazoKKyAg
ICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYmxhY2siKTsKKyAgICB9Cit9CisKK3RlbXBsYXRl
PD4KK2lubGluZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciBm
cm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUg
PT0gImN5YW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvck1hZ2Vu
dGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVl
ID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxTeW5jUHJpbnRDb2xvckJsYWNrOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckN5YW47Cit9
CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7Cisg
ICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JDeWFu
OgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJjeWFuIik7CisgICAgY2FzZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICBy
ZXR1cm4gQVNDSUlMaXRlcmFsKCJtYWdlbnRhIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiBBU0NJ
SUxpdGVyYWwoInllbGxvdyIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImJs
YWNrIik7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JDeWFuOworICAgIGlm
ICh2YWx1ZSA9PSAibWFnZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVs
bG93IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5j
UHJpbnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKKyAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckJsYWNrOwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JDeWFuOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKKworKyAodm9pZClfcGFyc2VEYXRhYmFzZUlk
OihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQp
X3BhcnNlUHJpbWFyeUNvbG9yczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VFcnJv
cjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChEYXRhYmFzZURvbWFpbikKKworKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU051
bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7CisgICAgKm91
dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VQcmltYXJ5
Q29sb3JzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAorewor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNz
XSk7CisgICAgKm91dFZhbHVlID0gQChJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KHBheWxvYWQpKTsKK30KKworKyAodm9pZClf
cGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5
bG9hZCwgW05TQXJyYXkvKjxOU1N0cmluZz4qLyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZUVycm9y
OihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNE
aWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW1w
b3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisK
K0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlk
PiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7CisgICAgc2VsZi5tZXNzYWdlID0gcGF5
bG9hZFtAIm1lc3NhZ2UiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJP
UEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7CisgICAgc2VsZi5jb2RlID0gW3BheWxv
YWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNv
bk9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnNwZWN0b3JPYmpl
Y3Q6W2pzb25PYmplY3QgdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlCit7CisgICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOworCisg
ICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICBzZWxmLmNvZGUgPSBjb2RlOworCisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdl
Cit7CisgICAgW3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKK30K
KworLSAoTlNTdHJpbmcgKiltZXNzYWdlCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JL
ZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKK3sKKyAgICBb
c3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUiXTsKK30KKworLSAoaW50KWNvZGUK
K3sKKyAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Cit9CisKK0BlbmQK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1
bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMu
anNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjRiOGRhNjcxZTVmMzNkNzY1YTcwZTVmOGNjMTAwMWIy
ZGJjOTI5MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwt
Y2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDE2MDcgQEAKKyMj
IyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBh
cmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisvLyBEYXRhYmFzZS4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5Q
cmltYXJ5Q29sb3JzIiwge1JlZDogInJlZCIsIEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9
KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzIiwgW3sibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogIm9i
amVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJp
bmciLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51
bWJlciIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2Jq
ZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAib2Jq
ZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAi
bnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJzcWxFcnJvciIsICJ0eXBlIjog
Im9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAidHlw
ZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogImFsdGVybmF0ZUNvbG9y
cyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAicHJpbnRD
b2xvciIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9XSwgWyJjb2x1bW5OYW1l
cyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJ
ZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAicHJpbnRD
b2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiLCBbeyJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUi
OiAib2JqZWN0IiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6
ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlw
ZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJ2YWx1ZXMiLCAidHlw
ZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJwYXlsb2FkIiwgInR5
cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAiZGF0YWJhc2VJZCIs
ICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInNxbEVycm9y
IiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAic2NyZWVu
Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJh
bHRlcm5hdGVDb2xvcnMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsi
bmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogZmFsc2V9
XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxv
YWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVD
b2xvcnMiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4o
IkRhdGFiYXNlIik7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxs
LXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAg
ICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBk
aXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9
CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFj
a2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVy
bmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZURhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSogaW5f
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSog
Y29uc3QgaW5fdGltZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogaW5f
dmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBjb25zdCBpbl9wYXlsb2Fk
LCBjb25zdCBpbnQqIGNvbnN0IGluX2RhdGFiYXNlSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBjb25zdCBpbl9zY3JlZW5Db2xv
ciwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBj
b25zdCBTdHJpbmcqIGNvbnN0IGluX3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6
Okluc3BlY3RvckFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3Rlcywg
ZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIGlu
X3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0
YWJhc2VJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIGluX3NxbEVycm9yLCBj
b25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFy
cmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikgPSAw
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRo
LW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorCitjbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7
CitwdWJsaWM6CisgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwcmludENvbG9yJyB3aGls
ZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycy4K
KyAgICBlbnVtIGNsYXNzIFByaW50Q29sb3IgeworICAgICAgICBDeWFuID0gMywKKyAgICAgICAg
TWFnZW50YSA9IDQsCisgICAgICAgIFllbGxvdyA9IDUsCisgICAgICAgIEJsYWNrID0gNiwKKyAg
ICB9OyAvLyBlbnVtIGNsYXNzIFByaW50Q29sb3IKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVj
dG9yQXJyYXkqIG9wdF9pbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRfaW5f
bm90ZXMsIGNvbnN0IGRvdWJsZSogY29uc3Qgb3B0X2luX3RpbWVzdGFtcCwgY29uc3QgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3QqIG9wdF9pbl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5z
cGVjdG9yVmFsdWUqIGNvbnN0IG9wdF9pbl9wYXlsb2FkLCBjb25zdCBpbnQqIGNvbnN0IG9wdF9p
bl9kYXRhYmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogb3B0X2luX3Nx
bEVycm9yLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdF9pbl9zY3JlZW5Db2xvciwgY29uc3QgSW5z
cGVjdG9yOjpJbnNwZWN0b3JBcnJheSogb3B0X2luX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3Ry
aW5nKiBjb25zdCBvcHRfaW5fcHJpbnRDb2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpPcHRPdXRwdXQ8U3RyaW5nPiogb3B0X291dF9ub3RlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
T3B0T3V0cHV0PGRvdWJsZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvcHRfb3V0X3ZhbHVlcywg
SW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+
KiBvcHRfb3V0X3BheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBv
cHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRD
b2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
RXJyb3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBpbl9jb2x1bW5O
YW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3Qg
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9y
LCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNv
bnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUq
IG91dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBvdXRfdmFsdWVzLCBJ
bnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJ
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxF
cnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91dF9z
Y3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIH5EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwor
cHJpdmF0ZToKKyAgICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1
ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBl
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFs
dGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToK
KyAgICBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3Bh
dGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYKK3ByaXZhdGU6CisgICAgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKik7CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQg
eyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6fkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVh
dGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKwor
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNr
ZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJh
Y2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJEYXRh
YmFzZSIpLCB0aGlzKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JP
YmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4g
cHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJz
OworICAgIG1lc3NhZ2UtPmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0
ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMi
KQorICAgICAgICBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgV1RGTW92
ZShwYXJhbWV0ZXJzKSk7CisgICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnMiKQorICAgICAgICBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMocmVxdWVz
dElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCBtYWtlU3RyaW5nKCdcJycsICJEYXRhYmFzZSIsICcuJywgbWV0aG9kLCAiJyB3YXMg
bm90IGZvdW5kIikpOworfQorCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiYgcGFyYW1ldGVycykKK3sKKyAgICBib29sIG9wdF9pbl9jb2x1bW5OYW1lc192YWx1
ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IG9w
dF9pbl9jb2x1bW5OYW1lcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRl
cnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgJm9wdF9pbl9jb2x1bW5OYW1l
c192YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9ub3Rlc192YWx1ZUZvdW5kID0gZmFsc2U7
CisgICAgU3RyaW5nIG9wdF9pbl9ub3RlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmlu
ZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoIm5vdGVzIiksICZvcHRfaW5fbm90ZXNf
dmFsdWVGb3VuZCk7CisgICAgYm9vbCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPSBmYWxz
ZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiBvcHRfaW5fdGlt
ZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0RG91YmxlKHBhcmFtZXRlcnMuZ2V0KCks
IEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksICZvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQp
OworICAgIGJvb2wgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBvcHRfaW5fdmFsdWVzID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgidmFsdWVz
IiksICZvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQpOworICAgIGJvb2wgb3B0X2luX3BheWxvYWRf
dmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVl
PiBvcHRfaW5fcGF5bG9hZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFZhbHVlKHBhcmFtZXRl
cnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCAmb3B0X2luX3BheWxvYWRfdmFsdWVG
b3VuZCk7CisgICAgYm9vbCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID0gZmFsc2U7Cisg
ICAgaW50IG9wdF9pbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdl
cihwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgJm9wdF9pbl9k
YXRhYmFzZUlkX3ZhbHVlRm91bmQpOworICAgIGJvb2wgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91
bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG9wdF9p
bl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdl
dCgpLCBBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksICZvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3Vu
ZCk7CisgICAgYm9vbCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOworICAg
IFN0cmluZyBvcHRfaW5fc2NyZWVuQ29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJp
bmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCAmb3B0X2lu
X3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQpOworICAgIGJvb2wgb3B0X2luX2FsdGVybmF0ZUNvbG9y
c192YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJy
YXk+IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJh
eShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCAmb3B0
X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9wcmludENv
bG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBTdHJpbmcgb3B0X2luX3ByaW50Q29sb3IgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRl
cmFsKCJwcmludENvbG9yIiksICZvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kKTsKKyAgICBp
ZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgeworICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpJbnZhbGlkUGFyYW1zLCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9k
ICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnMiKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVy
KSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycyhyZXF1ZXN0SWQsIG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID8gb3B0X2lu
X2NvbHVtbk5hbWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX25vdGVzX3ZhbHVlRm91bmQgPyAm
b3B0X2luX25vdGVzIDogbnVsbHB0ciwgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID8gJm9w
dF9pbl90aW1lc3RhbXAgOiBudWxscHRyLCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPyBvcHRf
aW5fdmFsdWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA/IG9w
dF9pbl9wYXlsb2FkLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3Vu
ZCA/ICZvcHRfaW5fZGF0YWJhc2VJZCA6IG51bGxwdHIsIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZv
dW5kID8gb3B0X2luX3NxbEVycm9yLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3NjcmVlbkNvbG9y
X3ZhbHVlRm91bmQgPyAmb3B0X2luX3NjcmVlbkNvbG9yIDogbnVsbHB0ciwgb3B0X2luX2FsdGVy
bmF0ZUNvbG9yc192YWx1ZUZvdW5kID8gb3B0X2luX2FsdGVybmF0ZUNvbG9ycy5nZXQoKSA6IG51
bGxwdHIsIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPyAmb3B0X2luX3ByaW50Q29sb3Ig
OiBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgRXJyb3JT
dHJpbmcgZXJyb3I7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91
dHB1dDxTdHJpbmc+IG91dF9ub3RlczsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRw
dXQ8ZG91YmxlPiBvdXRfdGltZXN0YW1wOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91
dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gb3V0X3ZhbHVlczsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gb3V0X3Bh
eWxvYWQ7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpEYXRhYmFzZUlkPiBvdXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNv
bG9yOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0
PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOworICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnMoZXJyb3IsIG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID8g
b3B0X2luX2NvbHVtbk5hbWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX25vdGVzX3ZhbHVlRm91
bmQgPyAmb3B0X2luX25vdGVzIDogbnVsbHB0ciwgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5k
ID8gJm9wdF9pbl90aW1lc3RhbXAgOiBudWxscHRyLCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQg
PyBvcHRfaW5fdmFsdWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3BheWxvYWRfdmFsdWVGb3Vu
ZCA/IG9wdF9pbl9wYXlsb2FkLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX2RhdGFiYXNlSWRfdmFs
dWVGb3VuZCA/ICZvcHRfaW5fZGF0YWJhc2VJZCA6IG51bGxwdHIsIG9wdF9pbl9zcWxFcnJvcl92
YWx1ZUZvdW5kID8gb3B0X2luX3NxbEVycm9yLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3NjcmVl
bkNvbG9yX3ZhbHVlRm91bmQgPyAmb3B0X2luX3NjcmVlbkNvbG9yIDogbnVsbHB0ciwgb3B0X2lu
X2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kID8gb3B0X2luX2FsdGVybmF0ZUNvbG9ycy5nZXQo
KSA6IG51bGxwdHIsIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPyAmb3B0X2luX3ByaW50
Q29sb3IgOiBudWxscHRyLCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0
YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVy
cm9yLCAmb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCAmb3V0X3ByaW50Q29s
b3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgeworICAgICAgICBpZiAob3V0X2NvbHVt
bk5hbWVzKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVt
bk5hbWVzIiksIG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIGlmIChvdXRfbm90ZXMuaXNBc3Np
Z25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3Rl
cyIpLCBvdXRfbm90ZXMuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfdGltZXN0YW1wLmlz
QXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgi
dGltZXN0YW1wIiksIG91dF90aW1lc3RhbXAuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRf
dmFsdWVzLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJ
TGl0ZXJhbCgidmFsdWVzIiksIG91dF92YWx1ZXMuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChv
dXRfcGF5bG9hZC5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFT
Q0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBvdXRfcGF5bG9hZC5nZXRWYWx1ZSgpKTsKKyAgICAgICAg
aWYgKG91dF9kYXRhYmFzZUlkLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0
SW50ZWdlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgb3V0X2RhdGFiYXNlSWQuZ2V0VmFs
dWUoKSk7CisgICAgICAgIGlmIChvdXRfc3FsRXJyb3IpCisgICAgICAgICAgICByZXN1bHQtPnNl
dE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIG91dF9zcWxFcnJvcik7CisgICAgICAg
IGlmIChvdXRfc2NyZWVuQ29sb3IuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5z
ZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBvdXRfc2NyZWVuQ29sb3IuZ2V0
VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICAgICAg
cmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBvdXRfYWx0
ZXJuYXRlQ29sb3JzKTsKKyAgICAgICAgaWYgKG91dF9wcmludENvbG9yLmlzQXNzaWduZWQoKSkK
KyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIp
LCBvdXRfcHJpbnRDb2xvci5nZXRWYWx1ZSgpKTsKKyAgICB9CisgICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBX
VEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYmIHBhcmFtZXRlcnMpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
QXJyYXk+IGluX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFy
YW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBudWxscHRyKTsKKyAg
ICBTdHJpbmcgaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1l
dGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBudWxscHRyKTsKKyAgICBkb3VibGUg
aW5fdGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0RG91YmxlKHBhcmFtZXRlcnMu
Z2V0KCksIEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIG51bGxwdHIpOworICAgIFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fdmFsdWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG51
bGxwdHIpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBpbl9wYXlsb2Fk
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlM
aXRlcmFsKCJwYXlsb2FkIiksIG51bGxwdHIpOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVy
YWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0cik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBpbl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChw
YXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIG51bGxwdHIpOworICAg
IFN0cmluZyBpbl9zY3JlZW5Db2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhw
YXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIG51bGxwdHIpOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBpbl9hbHRlcm5hdGVDb2xvcnMg
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxp
dGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBudWxscHRyKTsKKyAgICBTdHJpbmcgaW5fcHJpbnRD
b2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBB
U0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgbnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERp
c3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFt
cywgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJ
ZCwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGltZXN0YW1wLCAqaW5fdmFsdWVzLCAq
aW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVycm9yLCBpbl9zY3JlZW5Db2xvciwg
KmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvcik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisjZW5kaWYKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBT
dHJpbmcgb3V0X25vdGVzOworICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOworICAgIEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0IG91dF92YWx1ZXM7CisgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZSBvdXRfcGF5bG9hZDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RGF0
YWJhc2VJZCBvdXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOworICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRfYWx0ZXJuYXRlQ29sb3Jz
OworICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9w
cmludENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhlcnJv
ciwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGltZXN0YW1wLCAqaW5fdmFsdWVzLCAq
aW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVycm9yLCBpbl9zY3JlZW5Db2xvciwg
KmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvciwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0
X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2Rh
dGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5Db2xvciwgb3V0X2FsdGVybmF0ZUNv
bG9ycywgJm91dF9wcmludENvbG9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAg
ICAgICAgcmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG91dF9j
b2x1bW5OYW1lcyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90
ZXMiKSwgb3V0X25vdGVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFs
KCJ0aW1lc3RhbXAiKSwgb3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0
KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG91dF92YWx1ZXMpOworICAgICAgICByZXN1bHQtPnNl
dFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBvdXRfcGF5bG9hZCk7CisgICAgICAgIHJl
c3VsdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgb3V0X2RhdGFiYXNl
SWQpOworICAgICAgICByZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiks
IG91dF9zcWxFcnJvcik7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
c2NyZWVuQ29sb3IiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1D
b25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOworICAgICAgICByZXN1bHQtPnNldEFycmF5
KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIG91dF9hbHRlcm5hdGVDb2xvcnMpOwor
ICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9w
cmludENvbG9yKSk7CisgICAgfQorICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0
KSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0
aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBF
bmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJJ
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
IyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNw
YWNlIFByb3RvY29sIHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgRGF0
YWJhc2UgeworY2xhc3MgRXJyb3I7CitlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnM7Cit9IC8vIERh
dGFiYXNlCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworLy8gVHlwZWRlZnMu
CituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ug
b2JqZWN0LiAqLwordHlwZWRlZiBpbnQgRGF0YWJhc2VJZDsKK3R5cGVkZWYgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+IENvbG9yTGlzdDsKK30gLy8gRGF0YWJhc2UKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworbmFt
ZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBj
b2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVl
KFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNf
Y2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwor
CituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogICovCitlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMg
eworICAgIFJlZCA9IDAsCisgICAgR3JlZW4gPSAxLAorICAgIEJsdWUgPSAyLAorfTsgLy8gZW51
bSBjbGFzcyBQcmltYXJ5Q29sb3JzCisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9y
IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAg
ZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEg
PDwgMCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0g
KE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAg
ICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypFcnJvciovSW5zcGVjdG9yT2JqZWN0PiYm
IG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVp
bGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmll
bmQgY2xhc3MgRXJyb3I7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBN
ZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5
X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0
KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiY29kZSIp
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CisgICAg
ICAgIH0KKworICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXpl
b2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAg
ICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZyZXN1
bHQpKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25z
dHJ1Y3RvcjoKKyAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQorICAg
ICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRDb2RlKC4uLikKKyAgICAg
KiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCit9IC8vIERhdGFiYXNlCisK
KworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2Nv
bEVudW1UeXBlPgorc3RkOjpvcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2Un
IERvbWFpbgordGVtcGxhdGU8Pgorc3RkOjpvcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmKTsKKwor
fSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0
dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsK
KworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVu
dW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgInJlZCIsCisgICAgImdyZWVuIiwKKyAgICAi
Ymx1ZSIsCisgICAgImN5YW4iLAorICAgICJtYWdlbnRhIiwKKyAgICAieWVsbG93IiwKKyAgICAi
YmxhY2siLAorfTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Cisg
ICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0
aGUgJ0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4KK3N0ZDo6b3B0aW9uYWw8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3Qg
U3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0
YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4sCisgICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUsCisgICAg
fTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgaWYgKHByb3Rv
Y29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAg
ICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQor
CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyOwor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsg
bV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JB
cnJheSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fbm90ZXMsIGNvbnN0
IGRvdWJsZSogY29uc3QgaW5fdGltZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdCogaW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBjb25zdCBp
bl9wYXlsb2FkLCBjb25zdCBpbnQqIGNvbnN0IGluX2RhdGFiYXNlSWQsIGNvbnN0IEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBjb25zdCBpbl9z
Y3JlZW5Db2xvciwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSogaW5fYWx0ZXJuYXRl
Q29sb3JzLCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX3ByaW50Q29sb3IpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQs
IGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBT
dHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIGluX3Bh
eWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBp
bl9wcmludENvbG9yKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPFRlc3RQ
cm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1v
cHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpl
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBJbnNwZWN0
b3I6Okluc3BlY3RvckFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25zdCBp
bl9ub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCBpbl90aW1lc3RhbXAsIGNvbnN0IEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWUqIGNvbnN0IGluX3BheWxvYWQsIGNvbnN0IGludCogY29uc3QgaW5fZGF0YWJhc2VJZCwg
Y29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBTdHJp
bmcqIGNvbnN0IGluX3NjcmVlbkNvbG9yLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5
KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fcHJpbnRDb2xvcikK
K3sKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2Fs
bGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAq
Km5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVz
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRl
Q29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yICpwcmludENvbG9yKSB7CisgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5O
YW1lcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVU
RVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOworICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3Is
IEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAg
aWYgKGNvbHVtbk5hbWVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheShBU0NJ
SUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KCpjb2x1bW5OYW1l
cykpOworICAgICAgICBpZiAobm90ZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksICpub3Rlcyk7CisgICAgICAgIGlmICh0aW1lc3Rh
bXApCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRp
bWVzdGFtcCIpLCAqdGltZXN0YW1wKTsKKyAgICAgICAgaWYgKHZhbHVlcykKKyAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIFsqdmFsdWVz
IHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgICAgIGlmIChwYXlsb2FkKQorICAgICAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgWypwYXlsb2Fk
IHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgICAgIGlmIChkYXRhYmFzZUlkKQorICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCAq
ZGF0YWJhc2VJZCk7CisgICAgICAgIGlmIChzcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgWypzcWxFcnJvciB0b0lu
c3BlY3Rvck9iamVjdF0pOworICAgICAgICBpZiAoc2NyZWVuQ29sb3IpCisgICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIHRvUHJv
dG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7CisgICAgICAgIGlmIChhbHRlcm5hdGVDb2xvcnMp
CisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJu
YXRlQ29sb3JzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKKyAg
ICAgICAgaWYgKHByaW50Q29sb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmlu
ZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgdG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xv
cikpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBXVEZNb3ZlKHJlc3VsdE9iamVjdCkpOworICAgIH07CisKKyAgICBOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKm9faW5fY29sdW1uTmFtZXM7CisgICAgaWYgKGluX2NvbHVtbk5hbWVzKQorICAgICAg
ICBvX2luX2NvbHVtbk5hbWVzID0gb2JqY1N0cmluZ0FycmF5KGluX2NvbHVtbk5hbWVzKTsKKyAg
ICBOU1N0cmluZyAqb19pbl9ub3RlczsKKyAgICBpZiAoaW5fbm90ZXMpCisgICAgICAgIG9faW5f
bm90ZXMgPSAqaW5fbm90ZXM7CisgICAgZG91YmxlIG9faW5fdGltZXN0YW1wOworICAgIGlmIChp
bl90aW1lc3RhbXApCisgICAgICAgIG9faW5fdGltZXN0YW1wID0gKmluX3RpbWVzdGFtcDsKKyAg
ICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fdmFsdWVzOworICAgIGlmIChpbl92YWx1ZXMp
CisgICAgICAgIG9faW5fdmFsdWVzID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBp
bml0V2l0aEluc3BlY3Rvck9iamVjdDppbl92YWx1ZXNdIGF1dG9yZWxlYXNlXTsKKyAgICBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKm9faW5fcGF5bG9hZDsKKyAgICBpZiAoaW5fcGF5bG9hZCkKKyAg
ICAgICAgb19pbl9wYXlsb2FkID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0
V2l0aEluc3BlY3Rvck9iamVjdDppbl9wYXlsb2FkXSBhdXRvcmVsZWFzZV07CisgICAgaW50IG9f
aW5fZGF0YWJhc2VJZDsKKyAgICBpZiAoaW5fZGF0YWJhc2VJZCkKKyAgICAgICAgb19pbl9kYXRh
YmFzZUlkID0gKmluX2RhdGFiYXNlSWQ7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
b19pbl9zcWxFcnJvcjsKKyAgICBpZiAoaW5fc3FsRXJyb3IpCisgICAgICAgIG9faW5fc3FsRXJy
b3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEluc3BlY3Rv
ck9iamVjdDppbl9zcWxFcnJvcl0gYXV0b3JlbGVhc2VdOworICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycyBvX2luX3NjcmVlbkNvbG9yOworICAgIGlmIChpbl9zY3JlZW5Db2xv
cikKKyAgICAgICAgb19pbl9zY3JlZW5Db2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KCppbl9zY3JlZW5Db2xvcik7CisgICAgTlNBcnJh
eS8qPE5TU3RyaW5nPiovICpvX2luX2FsdGVybmF0ZUNvbG9yczsKKyAgICBpZiAoaW5fYWx0ZXJu
YXRlQ29sb3JzKQorICAgICAgICBvX2luX2FsdGVybmF0ZUNvbG9ycyA9IG9iamNTdHJpbmdBcnJh
eShpbl9hbHRlcm5hdGVDb2xvcnMpOworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3Igb19pbl9wcmludENvbG9yOworICAgIGlmIChp
bl9wcmludENvbG9yKQorICAgICAgICBvX2luX3ByaW50Q29sb3IgPSBmcm9tUHJvdG9jb2xTdHJp
bmc8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvcj4oKmluX3ByaW50Q29sb3IpOworCisgICAgW21fZGVsZWdhdGUgZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooaW5fY29sdW1uTmFtZXMgPyAmb19pbl9j
b2x1bW5OYW1lcyA6IG5pbCkgbm90ZXM6KGluX25vdGVzID8gJm9faW5fbm90ZXMgOiBuaWwpIHRp
bWVzdGFtcDooaW5fdGltZXN0YW1wID8gJm9faW5fdGltZXN0YW1wIDogbmlsKSB2YWx1ZXM6KGlu
X3ZhbHVlcyA/ICZvX2luX3ZhbHVlcyA6IG5pbCkgcGF5bG9hZDooaW5fcGF5bG9hZCA/ICZvX2lu
X3BheWxvYWQgOiBuaWwpIGRhdGFiYXNlSWQ6KGluX2RhdGFiYXNlSWQgPyAmb19pbl9kYXRhYmFz
ZUlkIDogbmlsKSBzcWxFcnJvcjooaW5fc3FsRXJyb3IgPyAmb19pbl9zcWxFcnJvciA6IG5pbCkg
c2NyZWVuQ29sb3I6KGluX3NjcmVlbkNvbG9yID8gJm9faW5fc2NyZWVuQ29sb3IgOiBuaWwpIGFs
dGVybmF0ZUNvbG9yczooaW5fYWx0ZXJuYXRlQ29sb3JzID8gJm9faW5fYWx0ZXJuYXRlQ29sb3Jz
IDogbmlsKSBwcmludENvbG9yOihpbl9wcmludENvbG9yID8gJm9faW5fcHJpbnRDb2xvciA6IG5p
bCldOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpl
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEluc3BlY3Rv
cjo6SW5zcGVjdG9yQXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVz
LCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYg
aW5fdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIGluX3BheWxvYWQsIGludCBpbl9k
YXRhYmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgaW5fc3FsRXJyb3Is
IGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9y
QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKQor
eworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxs
YmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5v
dGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9y
cyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciBw
cmludENvbG9yKSB7CisgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7
CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywg
QCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5h
dGVDb2xvcnMiKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwo
ImNvbHVtbk5hbWVzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7CisgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbm90ZXMp
OworICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFt
cCIpLCB0aW1lc3RhbXApOworICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdChBU0NJSUxp
dGVyYWwoInZhbHVlcyIpLCBbdmFsdWVzIHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIFtwYXlsb2FkIHRv
SW5zcGVjdG9yT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcihBU0NJ
SUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgZGF0YWJhc2VJZCk7CisgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgW3NxbEVycm9yIHRvSW5zcGVj
dG9yT2JqZWN0XSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgic2NyZWVuQ29sb3IiKSwgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOworICAgICAg
ICByZXN1bHRPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiks
IGluc3BlY3RvclN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOworICAgICAgICByZXN1bHRP
YmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgdG9Qcm90b2NvbFN0
cmluZyhwcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSk7CisgICAgfTsKKworICAgIE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lcyA9IG9iamNTdHJpbmdBcnJheSgm
aW5fY29sdW1uTmFtZXMpOworICAgIE5TU3RyaW5nICpvX2luX25vdGVzID0gaW5fbm90ZXM7Cisg
ICAgZG91YmxlIG9faW5fdGltZXN0YW1wID0gaW5fdGltZXN0YW1wOworICAgIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqb19pbl92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2Nd
IGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0OiZpbl92YWx1ZXNdIGF1dG9yZWxlYXNlXTsKKyAgICBS
V0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fcGF5bG9hZCA9IFtbW1JXSVByb3RvY29sSlNPTk9i
amVjdCBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6JmluX3BheWxvYWRdIGF1dG9yZWxl
YXNlXTsKKyAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKKyAgICBUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2luX3NxbEVycm9yID0gW1tbVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6JmluX3NxbEVycm9yXSBh
dXRvcmVsZWFzZV07CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIG9faW5f
c2NyZWVuQ29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzPihpbl9zY3JlZW5Db2xvcik7CisgICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpv
X2luX2FsdGVybmF0ZUNvbG9ycyA9IG9iamNTdHJpbmdBcnJheSgmaW5fYWx0ZXJuYXRlQ29sb3Jz
KTsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3Igb19pbl9wcmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4oaW5fcHJpbnRD
b2xvcik7CisKKyAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRo
RXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2sgY29sdW1uTmFtZXM6b19pbl9jb2x1bW5OYW1lcyBub3RlczpvX2luX25vdGVzIHRpbWVzdGFt
cDpvX2luX3RpbWVzdGFtcCB2YWx1ZXM6b19pbl92YWx1ZXMgcGF5bG9hZDpvX2luX3BheWxvYWQg
ZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgc3FsRXJyb3I6b19pbl9zcWxFcnJvciBzY3JlZW5D
b2xvcjpvX2luX3NjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczpvX2luX2FsdGVybmF0ZUNvbG9y
cyBwcmludENvbG9yOm9faW5fcHJpbnRDb2xvcl07Cit9CisKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0
dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNl
dHRlcj1zZXREYXRhYmFzZUhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhh
bmRsZXI+IGRhdGFiYXNlSGFuZGxlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdp
dGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5o
PgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciogX2NvbnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVy
PiBfZGF0YWJhc2VIYW5kbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwor
ICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RhdGFiYXNl
SGFuZGxlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0
RGF0YWJhc2VIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWhh
bmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfZGF0YWJhc2VIYW5kbGVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBbX2RhdGFiYXNlSGFuZGxlciByZWxlYXNlXTsKKyAgICBfZGF0YWJhc2VI
YW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hl
ciA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBzdGQ6Om1ha2VfdW5pcXVl
PEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIsIEFs
dGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+PihBU0NJSUxpdGVyYWwoIkRhdGFiYXNl
IiksICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAgX2Nv
bnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOworfQor
CistIChpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWRhdGFiYXNlSGFuZGxl
cgoreworICAgIHJldHVybiBfZGF0YWJhc2VIYW5kbGVyOworfQorCitAZW5kCisKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0Zv
dW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dC5oPgorCisKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOworCisKK3R5cGVkZWYg
TlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycykgewor
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZCwKKyAgICBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVlbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnNCbHVlLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgewor
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrLAorfTsK
KwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAorICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdl
bnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5T
SW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yKSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yQ3lhbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKKyAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JC
bGFjaywKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcikgeworICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4sCisg
ICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yTWFnZW50YSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JZZWxsb3csCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2ssCit9OworCisKK19fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpz
b25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1l
c3NhZ2UgY29kZTooaW50KWNvZGU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKK0BlbmQKKworQHByb3RvY29sIFRlc3RQcm90b2Nv
bERhdGFiYXNlRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAcmVxdWlyZWQKKy0gKHZvaWQpZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3Ry
aW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAq
dGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVl
bkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgKnByaW50
Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKilub3RlcyB0aW1lc3RhbXA6KGRvdWJs
ZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKil2YWx1ZXMgcGF5
bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXBheWxvYWQgZGF0YWJhc2VJZDooaW50ICop
ZGF0YWJhc2VJZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJv
ciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICopc2NyZWVu
Q29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRl
Q29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3IgKilwcmludENvbG9yOworLSAodm9pZClleGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3Ip
KWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9h
ZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNr
IGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3Rlczoo
TlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICopcGF5bG9hZCBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBzcWxFcnJvcjooVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnMpc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKXByaW50Q29sb3I7CitA
ZW5kCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4K
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCisKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNp
b25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpD
RW51bVR5cGU+CitPYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpOworCisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnMgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAg
Y2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ6CisgICAgICAgIHJldHVy
biBBU0NJSUxpdGVyYWwoInJlZCIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzR3JlZW46CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImdyZWVuIik7Cisg
ICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlOgorICAgICAgICBy
ZXR1cm4gQVNDSUlMaXRlcmFsKCJibHVlIik7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+Citpbmxp
bmUgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAicmVkIikKKyAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDsKKyAgICBpZiAodmFs
dWUgPT0gImdyZWVuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9yc0dyZWVuOworICAgIGlmICh2YWx1ZSA9PSAiYmx1ZSIpCisgICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNCbHVlOworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ7
Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHZhbHVlKQoreworICAgIHN3
aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVy
YWwoImN5YW4iKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRl
cmFsKCJtYWdlbnRhIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgorICAgICAgICByZXR1cm4gQVNDSUlM
aXRlcmFsKCJ5ZWxsb3ciKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuIEFTQ0lJ
TGl0ZXJhbCgiYmxhY2siKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIGZyb21Q
cm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAi
Y3lhbiIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEi
KQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQor
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKKyAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JCbGFjazsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
ckN5YW47Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHZhbHVlKQorewor
ICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW46CisgICAgICAgIHJldHVybiBBU0NJ
SUxpdGVyYWwoImN5YW4iKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCJtYWdlbnRhIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgorICAgICAgICByZXR1cm4g
QVNDSUlMaXRlcmFsKCJ5ZWxsb3ciKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJu
IEFTQ0lJTGl0ZXJhbCgiYmxhY2siKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1
ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1h
Z2VudGEiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE7CisgICAgaWYgKHZhbHVlID09ICJ5ZWxs
b3ciKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikK
KyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JCbGFjazsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvckN5YW47Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUp
Cit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4g
QVNDSUlMaXRlcmFsKCJjeWFuIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4g
QVNDSUlMaXRlcmFsKCJtYWdlbnRhIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVy
biBBU0NJSUxpdGVyYWwoInllbGxvdyIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJldHVy
biBBU0NJSUxpdGVyYWwoImJsYWNrIik7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
IGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1
ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFn
ZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93
IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKKyAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvckJsYWNrOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3JDeWFuOworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHZhbHVlKQorewor
ICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjoKKyAgICAgICAgcmV0dXJuIEFTQ0lJ
TGl0ZXJhbCgiY3lhbiIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAgcmV0dXJuIEFTQ0lJ
TGl0ZXJhbCgibWFnZW50YSIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OgorICAgICAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCJ5ZWxsb3ciKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOgorICAgICAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCJibGFjayIpOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0g
ImN5YW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjsKKyAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEi
KQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisg
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3JCbGFjazsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lh
bjsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMg
KERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VQcmltYXJ5
Q29sb3JzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysg
KHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFi
YXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNO
dW1iZXIgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TTnVt
YmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0
VmFsdWUgPSBAKEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycz4ocGF5bG9hZCkpOworfQorCisrICh2b2lkKV9wYXJzZUNvbG9yTGlz
dDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJh
eS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xh
c3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2Nd
IGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Cisj
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwor
CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICos
IGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7CisgICAgc2VsZi5tZXNzYWdlID0g
cGF5bG9hZFtAIm1lc3NhZ2UiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7CisgICAgc2VsZi5jb2RlID0gW3Bh
eWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
anNvbk9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnNwZWN0b3JP
YmplY3Q6W2pzb25PYmplY3QgdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlCit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOwor
CisgICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICBzZWxmLmNvZGUgPSBjb2RlOworCisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNz
YWdlCit7CisgICAgW3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsK
K30KKworLSAoTlNTdHJpbmcgKiltZXNzYWdlCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdG
b3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKK3sKKyAg
ICBbc3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUiXTsKK30KKworLSAoaW50KWNv
ZGUKK3sKKyAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Cit9CisKK0Bl
bmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Rl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmYWRi
YTdiNzQ1NDQ4M2Q3NDA5ZWE2NjdkZTc2ZGFiOWU2ZTRkZjgKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdApAQCAtMCwwICsx
LDgzNSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKyMjIyBF
bmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8
QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0g
V1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlz
cGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3By
aXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVy
OworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgi
CisjZW5kaWYKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVk
ZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29s
IHsKKworCisKKworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2Vu
dC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgor
eworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRy
b2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtz
dXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVy
cy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRp
b24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0Lmg+CisKKworCisKKworCisKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKKwor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBl
PgorT2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKwor
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5o
PgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44NjFiYTA0OGNkZjM0Y2E0MTQxYjZkMTRiYzE5NWE2YjlkODY0ZWNhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJl
c3VsdApAQCAtMCwwICsxLDEzNjggQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5k
Q29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdp
dGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworLy8gTmV0d29yazEuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
Q29tbWFuZCgiTmV0d29yazEubG9hZFJlc291cmNlMSIsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNr
ZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMSIpOworCisvLyBOZXR3b3JrMy4KK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UxIiwgW10sIFtd
KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3Vy
Y2UyIiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3Jr
My5sb2FkUmVzb3VyY2UzIiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21t
YW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U0IiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U1IiwgW10sIFtdKTsKK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U2IiwgW10s
IFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVz
b3VyY2U3IiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdv
cmszIik7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMg
QmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXpl
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5k
RGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2Jh
Y2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3Bh
dGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBt
X2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCitjbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9
CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQpID0gMDsKK307Citj
bGFzcyBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZTEobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihsb25n
IGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElk
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBjYWxsSWQpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNShsb25nIGNhbGxJZCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBjYWxsSWQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
K2NsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI7CitjbGFzcyBBbHRlcm5h
dGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JT
dHJpbmcmKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+TmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShFcnJvclN0
cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihFcnJvclN0cmluZyYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMyhFcnJvclN0cmluZyYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChFcnJvclN0cmluZyYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNShFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgbG9hZFJlc291cmNlNihFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
bG9hZFJlc291cmNlNyhFcnJvclN0cmluZyYpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IH5OZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworcHJp
dmF0ZToKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCitwdWJsaWM6CisgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVy
KEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIp
IHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0
ZToKKyAgICBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURp
c3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYKK3ByaXZhdGU6CisgICAgTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKik7CisgICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdl
bnQgeyBudWxscHRyIH07Cit9OworCitjbGFzcyBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIGZp
bmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlz
cGF0Y2hlciYsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBk
aXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0
b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIHZvaWQgbG9hZFJl
c291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0
ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZv
aWQgbG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
JiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3Vy
Y2U2KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMp
OworICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0
ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBt
X2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgor
ICAgIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZgorcHJpdmF0ZToKKyAgICBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqKTsKKyAgICBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7
IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
cy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Cisj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5j
bHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmCisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCitOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CitOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6fk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisK
K1JlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
OjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsK
K30KKworTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
cihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFs
KCJOZXR3b3JrMSIpLCB0aGlzKTsKK30KKwordm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBw
YXJhbWV0ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZTEiKQorICAgICAg
ICBsb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgZWxz
ZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiTmV0d29yazEi
LCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKK30KKwordm9pZCBOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisjZW5kaWYKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9h
Z2VudC0+bG9hZFJlc291cmNlMShlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZN
b3ZlKHJlc3VsdCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUo
ZXJyb3IpKTsKK30KKworUmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNo
ZXIsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRj
aGVyLCBhZ2VudCkpOworfQorCitOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50
KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFp
bihBU0NJSUxpdGVyYWwoIk5ldHdvcmszIiksIHRoaXMpOworfQorCit2b2lkIE5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOworCisgICAgdHlwZWRlZiB2b2lkIChOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENh
bGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGlzcGF0
Y2hNYXA+IGRpc3BhdGNoTWFwOworICAgIGlmIChkaXNwYXRjaE1hcC5nZXQoKS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBNZXRob2RUYWJsZSB7CisgICAgICAgICAg
ICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICAgICAgQ2FsbEhhbmRsZXIgaGFuZGxlcjsKKyAg
ICAgICAgfSBjb21tYW5kc1tdID0geworICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMSIsICZO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxIH0sCisgICAgICAgICAgICB7
ICJsb2FkUmVzb3VyY2UyIiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZTIgfSwKKyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTMiLCAmTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlMyB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNCIs
ICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0IH0sCisgICAgICAgICAg
ICB7ICJsb2FkUmVzb3VyY2U1IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZTUgfSwKKyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTYiLCAmTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNiB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNl
NyIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3IH0sCisgICAgICAg
IH07CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNvbW1hbmRzKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAg
IGRpc3BhdGNoTWFwLmdldCgpLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5oYW5k
bGVyKTsKKyAgICB9CisKKyAgICBhdXRvIGZpbmRSZXN1bHQgPSBkaXNwYXRjaE1hcC5nZXQoKS5m
aW5kKG1ldGhvZCk7CisgICAgaWYgKGZpbmRSZXN1bHQgPT0gZGlzcGF0Y2hNYXAuZ2V0KCkuZW5k
KCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIk5ldHdv
cmszIiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAoKCp0aGlzKS4qZmluZFJlc3VsdC0+dmFsdWUpKHJlcXVlc3RJZCwgV1RG
TW92ZShwYXJhbWV0ZXJzKSk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikK
K3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
bG9hZFJlc291cmNlMShyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlm
CisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJj
ZTEoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKKyAg
ICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK3Zv
aWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Cisg
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMihyZXF1ZXN0SWQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsK
KyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTIoZXJyb3IpOworCisgICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJl
cXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6bG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
JikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBp
ZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+bG9hZFJlc291cmNlMyhyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vu
ZGlmCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNv
dXJjZTMoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsK
KyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisK
K3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7
CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNChyZXF1ZXN0SWQp
OworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBFcnJvclN0cmluZyBlcnJv
cjsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTQoZXJyb3IpOworCisgICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlNShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAg
ICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlci0+bG9hZFJlc291cmNlNShyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQor
I2VuZGlmCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRS
ZXNvdXJjZTUoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
KTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9
CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVy
KSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNihyZXF1ZXN0
SWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBFcnJvclN0cmluZyBl
cnJvcjsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTYoZXJyb3IpOworCisgICAgaWYg
KCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJikKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlci0+bG9hZFJlc291cmNlNyhyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAg
fQorI2VuZGlmCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxv
YWRSZXNvdXJjZTcoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1
bHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZy
b250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
cy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5
aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQ
cm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworLy8gVHlwZWRl
ZnMuCituYW1lc3BhY2UgTmV0d29yazIgeworLyogVW5pcXVlIGxvYWRlciBpZGVudGlmaWVyLiAq
LwordHlwZWRlZiBTdHJpbmcgTG9hZGVySWQ7Cit9IC8vIE5ldHdvcmsyCisvLyBFbmQgb2YgdHlw
ZWRlZnMuCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0
aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitA
cHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyOworQHByb3RvY29sIFRl
c3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKKworY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6Cisg
ICAgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29s
TmV0d29yazFEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9
CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRl
OworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5I
YW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK2NsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXIgeworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBt
X2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxv
bmcgcmVxdWVzdElkKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihs
b25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMo
bG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U0
KGxvbmcgcmVxdWVzdElkKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNl
NShsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZTYobG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3Vy
Y2U3KGxvbmcgcmVxdWVzdElkKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlk
PFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlMShsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0
cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3Ip
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAg
IH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
KTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxi
YWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisK
Kwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291
cmNlMShsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmlu
ZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07
CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsK
KyAgICB9OworCisgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKK3Zv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIo
bG9uZyByZXF1ZXN0SWQpCit7CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisg
ICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAg
fTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTJXaXRoRXJyb3JDYWxsYmFjazplcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9i
akNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcg
cmVxdWVzdElkKQoreworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikg
eworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVl
c3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlk
IHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRS
ZXNwb25zZShyZXF1ZXN0SWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH07CisK
KyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwordm9pZCBPYmpDSW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHJlcXVl
c3RJZCkKK3sKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNj
ZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9OworCisgICAg
W21fZGVsZWdhdGUgbG9hZFJlc291cmNlNFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3Rv
ck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQp
Cit7CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0Nh
bGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJl
cXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfTsKKworICAgIFttX2Rl
bGVnYXRlIGxvYWRSZXNvdXJjZTVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkKQorewor
ICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFj
ayA9IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0
ZSBsb2FkUmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
eworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUgbG9h
ZFJlc291cmNlN1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNr
OnN1Y2Nlc3NDYWxsYmFja107Cit9CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVm
YXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0
CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29yazFIYW5kbGVy
OikgaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBuZXR3b3JrMUhhbmRsZXI7
CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29yazNIYW5kbGVy
OikgaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiBuZXR3b3JrM0hhbmRsZXI7
CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3Bh
dGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
K0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9j
b2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IF9uZXR3b3JrMUhhbmRsZXI7CisgICAgaWQ8VGVzdFBy
b3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiBfbmV0d29yazNIYW5kbGVyOworfQorCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICgh
c2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAg
X2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KWRlYWxsb2MKK3sKKyAgICBbX25ldHdvcmsxSGFuZGxlciByZWxlYXNlXTsKKyAgICBbX25ldHdv
cmszSGFuZGxlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQp
c2V0TmV0d29yazFIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+
KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29yazFIYW5kbGVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBbX25ldHdvcmsxSGFuZGxlciByZWxlYXNlXTsKKyAgICBfbmV0d29y
azFIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0
Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBzdGQ6Om1ha2VfdW5p
cXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIs
IEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+PihBU0NJSUxpdGVyYWwoIk5ldHdv
cmsxIiksICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAg
X2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwor
fQorCistIChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+KW5ldHdvcmsxSGFu
ZGxlcgoreworICAgIHJldHVybiBfbmV0d29yazFIYW5kbGVyOworfQorCistICh2b2lkKXNldE5l
dHdvcmszSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiloYW5k
bGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmszSGFuZGxlcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgW19uZXR3b3JrM0hhbmRsZXIgcmVsZWFzZV07CisgICAgX25ldHdvcmszSGFu
ZGxlciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIg
PSBzdGQ6Om1ha2VfdW5pcXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
PihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxB
bHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyLCBBbHRl
cm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPj4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrMyIp
LCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250
cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKwor
LSAoaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiluZXR3b3JrM0hhbmRsZXIK
K3sKKyAgICByZXR1cm4gX25ldHdvcmszSGFuZGxlcjsKK30KKworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVz
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5
aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKworCisKKworCisKK0Bw
cm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQHJl
cXVpcmVkCistICh2b2lkKWxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShO
U1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKCkp
c3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazNE
b21haW5IYW5kbGVyIDxOU09iamVjdD4KK0ByZXF1aXJlZAorLSAodm9pZClsb2FkUmVzb3VyY2Ux
V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNr
IHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSgpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpbG9h
ZFJlc291cmNlMldpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoKSlzdWNjZXNzQ2FsbGJhY2s7Cist
ICh2b2lkKWxvYWRSZXNvdXJjZTNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAq
ZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKCkpc3VjY2Vzc0Nh
bGxiYWNrOworLSAodm9pZClsb2FkUmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXiko
TlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSgp
KXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpbG9hZFJlc291cmNlNVdpdGhFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
KHZvaWQoXikoKSlzdWNjZXNzQ2FsbGJhY2s7CistICh2b2lkKWxvYWRSZXNvdXJjZTZXaXRoRXJy
b3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOih2b2lkKF4pKCkpc3VjY2Vzc0NhbGxiYWNrOworLSAodm9pZClsb2FkUmVzb3Vy
Y2U3V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSgpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKwor
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT2JqQ0VudW1UeXBlIGZyb21Q
cm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
UGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazJEb21haW4pCisKKysgKHZvaWQpX3BhcnNl
TG9hZGVySWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5l
dHdvcmsyRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUxvYWRlcklkOihOU1N0cmluZyAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5T
U3RyaW5nICopcGF5bG9hZDsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
cy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5
aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlv
bnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNv
bi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMDg4
ZDQxNTNhYzE5MDYwMmY1OTZkMDZkNTAwZDBmZDExY2JiOWQyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMTc2IEBACisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisvLyBUeXBlRG9tYWluLgorSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckVudW0oIlR5cGVEb21haW4uVHlwZURvbWFpbkVudW0iLCB7U2hhcmVkOiAic2hhcmVkIiwg
UmVkOiAicmVkIiwgR3JlZW46ICJncmVlbiIsIEJsdWU6ICJibHVlIn0pOworCisvLyBDb21tYW5k
RG9tYWluLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkNvbW1hbmREb21haW4u
Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiLCBbXSwgWyJyZXR1cm5WYWx1ZSJdKTsKK0luc3Bl
Y3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkNvbW1hbmREb21haW4iKTsKKworLy8gRXZlbnRE
b21haW4uCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnREb21haW5EaXNwYXRjaGVyID0g
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JC
YWNrZW5kLCAiRXZlbnREb21haW4iKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJF
dmVudERvbWFpbi5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyIiwge1NoYXJlZDogInNo
YXJlZCIsIEJsYWNrOiAiYmxhY2siLCBXaGl0ZTogIndoaXRlIn0pOworSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckV2ZW50KCJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIiwgWyJw
YXJhbWV0ZXIiXSk7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJFdmVudERvbWFp
biIpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5
cGVzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Cisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3Zl
KGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVy
KCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToK
KyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9Owor
CisKK2NsYXNzIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1Ymxp
YyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0
ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2
b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgY2FsbElkKSA9IDA7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
KworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorY2xhc3MgQWx0
ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBwYXJh
bWV0ZXIgJ3JldHVyblZhbHVlJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgY29tbWFu
ZFdpdGhFbnVtUmV0dXJuVmFsdWUuCisgICAgZW51bSBjbGFzcyBSZXR1cm5WYWx1ZSB7CisgICAg
ICAgIFNoYXJlZCA9IDAsCisgICAgICAgIEN5YW4gPSA2LAorICAgICAgICBNYWdlbnRhID0gNywK
KyAgICAgICAgWWVsbG93ID0gOCwKKyAgICB9OyAvLyBlbnVtIGNsYXNzIFJldHVyblZhbHVlCisg
ICAgdmlydHVhbCB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKEVycm9yU3RyaW5nJiwg
Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmV0dXJuVmFsdWUqIG91dF9y
ZXR1cm5WYWx1ZSkgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkNvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIENvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsK
K3ByaXZhdGU6CisgICAgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFs
dGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0
ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYK
K3ByaXZhdGU6CisgICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNw
YXRjaGVyJiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIENv
bW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07
Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK0NvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5Db21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKCkgeyB9CisKK1JlZjxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+IENvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNr
ZW5kRGlzcGF0Y2hlciwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdl
bnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI6OkNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFj
a2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkNvbW1h
bmREb21haW4iKSwgdGhpcyk7Cit9CisKK3ZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJ
bnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8Q29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFy
YW1zIiksIHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiY29tbWFuZFdpdGhFbnVt
UmV0dXJuVmFsdWUiKQorICAgICAgICBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShyZXF1ZXN0
SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIkNvbW1hbmREb21haW4iLCAnLicsIG1ldGhvZCwgIicg
d2FzIG5vdCBmb3VuZCIpKTsKK30KKwordm9pZCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI6OmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShyZXF1ZXN0SWQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsK
KyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJldHVyblZh
bHVlIG91dF9yZXR1cm5WYWx1ZTsKKyAgICBtX2FnZW50LT5jb21tYW5kV2l0aEVudW1SZXR1cm5W
YWx1ZShlcnJvciwgJm91dF9yZXR1cm5WYWx1ZSk7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KQorICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInJldHVyblZhbHVlIiks
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShv
dXRfcmV0dXJuVmFsdWUpKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0
KSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK2NsYXNzIEV2
ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBFdmVudERvbWFpbkZy
b250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9u
dGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgICAgIC8vIE5hbWVkIGFmdGVyIHBh
cmFtZXRlciAncGFyYW1ldGVyJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXZlbnRX
aXRoRW51bVBhcmFtZXRlci4KKyAgICAgICAgZW51bSBjbGFzcyBQYXJhbWV0ZXIgeworICAgICAg
ICAgICAgU2hhcmVkID0gMCwKKyAgICAgICAgICAgIEJsYWNrID0gNCwKKyAgICAgICAgICAgIFdo
aXRlID0gNSwKKyAgICAgICAgfTsgLy8gZW51bSBjbGFzcyBQYXJhbWV0ZXIKKyAgICB2b2lkIGV2
ZW50V2l0aEVudW1QYXJhbWV0ZXIoUGFyYW1ldGVyIHBhcmFtZXRlcik7Citwcml2YXRlOgorICAg
IEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK3ZvaWQgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OmV2ZW50V2l0aEVu
dW1QYXJhbWV0ZXIoUGFyYW1ldGVyIHBhcmFtZXRlcikKK3sKKyAgICBSZWY8SW5zcGVjdG9yT2Jq
ZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1l
c3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIkV2
ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiKSk7CisgICAgUmVmPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwYXJh
bXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInBhcmFtZXRlciIpLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUocGFyYW1ldGVyKSk7
CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBXVEZN
b3ZlKHBhcmFtc09iamVjdCkpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNv
bk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
clByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKy8vIEZvcndhcmQg
ZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIFR5cGVEb21haW4geworZW51bSBjbGFzcyBUeXBlRG9t
YWluRW51bTsKK30gLy8gVHlwZURvbWFpbgorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25z
LgorCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0
YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51
bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFu
dFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBUeXBlRG9tYWluIHsKKy8qICAqLworZW51bSBjbGFz
cyBUeXBlRG9tYWluRW51bSB7CisgICAgU2hhcmVkID0gMCwKKyAgICBSZWQgPSAxLAorICAgIEdy
ZWVuID0gMiwKKyAgICBCbHVlID0gMywKK307IC8vIGVudW0gY2xhc3MgVHlwZURvbWFpbkVudW0K
K30gLy8gVHlwZURvbWFpbgorCisKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KK3N0ZDo6b3B0aW9uYWw8UHJvdG9jb2xFbnVt
VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBFbnVt
cyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgordGVtcGxhdGU8Pgorc3RkOjpvcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21h
aW5FbnVtPihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKwor
fSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVt
LXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisK
KyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCituYW1l
c3BhY2UgVGVzdEhlbHBlcnMgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25z
dGFudF92YWx1ZXNbXSA9IHsKKyAgICAic2hhcmVkIiwKKyAgICAicmVkIiwKKyAgICAiZ3JlZW4i
LAorICAgICJibHVlIiwKKyAgICAiYmxhY2siLAorICAgICJ3aGl0ZSIsCisgICAgImN5YW4iLAor
ICAgICJtYWdlbnRhIiwKKyAgICAieWVsbG93IiwKK307CisKK1N0cmluZyBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2Rl
XTsKK30KKworLy8gRW51bXMgaW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4KK3RlbXBsYXRlPD4K
K3N0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFp
bkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBl
RG9tYWluOjpUeXBlRG9tYWluRW51bT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sK
KyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OlNo
YXJlZCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpU
eXBlRG9tYWluRW51bTo6UmVkLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6
OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpHcmVlbiwKKyAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6Qmx1ZSwKKyAgICB9
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICBpZiAocHJvdG9j
b2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQorICAg
ICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9t
YWluRW51bSljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9
CisKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworCisKK30gLy8gbmFtZXNwYWNlIFBy
b3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFs
dWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90b2Nv
bENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
CitjbGFzcyBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFs
IDogcHVibGljIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJs
aWM6CisgICAgT2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxU
ZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVn
YXRlID0gaGFuZGxlcjsgfQorICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5W
YWx1ZShsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxp
ZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51
bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JWYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0lu
c3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0
dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQpCit7CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNT
dHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9y
KTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAg
ICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihUZXN0UHJvdG9jb2xDb21tYW5kRG9t
YWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSkgewor
ICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoInJldHVyblZhbHVlIiksIHRvUHJvdG9jb2xTdHJpbmcocmV0dXJuVmFsdWUpKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShy
ZXN1bHRPYmplY3QpKTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUgY29tbWFuZFdpdGhFbnVt
UmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2tdOworfQorCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+
CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZXRhaW4sIHNldHRlcj1zZXRDb21tYW5kRG9tYWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2Nv
bENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiBjb21tYW5kRG9tYWluSGFuZGxlcjsKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5F
dmVudERpc3BhdGNoZXIgKmV2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyOworQGVuZAorCisKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVy
OworICAgIGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiBfY29tbWFu
ZERvbWFpbkhhbmRsZXI7CisgICAgVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERp
c3BhdGNoZXIgKl9ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcjsKK30KKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKilj
b250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9s
bGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9j
Cit7CisgICAgW19jb21tYW5kRG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBbX2V2ZW50RG9t
YWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKwor
LSAodm9pZClzZXRDb21tYW5kRG9tYWluSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sQ29tbWFuZERv
bWFpbkRvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfY29tbWFu
ZERvbWFpbkhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfY29tbWFuZERvbWFpbkhh
bmRsZXIgcmVsZWFzZV07CisgICAgX2NvbW1hbmREb21haW5IYW5kbGVyID0gW2hhbmRsZXIgcmV0
YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8
T2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7Cisg
ICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IHN0ZDo6bWFrZV91bmlxdWU8QWx0ZXJuYXRlRGlzcGF0
Y2hhYmxlQWdlbnQ8Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+PihBU0NJSUxpdGVyYWwoIkNvbW1hbmREb21haW4i
KSwgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29u
dHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisK
Ky0gKGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiljb21tYW5kRG9t
YWluSGFuZGxlcgoreworICAgIHJldHVybiBfY29tbWFuZERvbWFpbkhhbmRsZXI7Cit9CisKKy0g
KFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICopZXZlbnREb21h
aW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBpZiAoIV9ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hl
cikKKyAgICAgICAgX2V2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xF
dmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVy
Ol9jb250cm9sbGVyXTsKKyAgICByZXR1cm4gX2V2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyOwor
fQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVz
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29u
dHJvbGxlcjsKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xs
ZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWV2ZW50V2l0
aEVudW1QYXJhbWV0ZXJXaXRoUGFyYW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50
V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIpcGFyYW1ldGVyCit7CisgICAgY29uc3QgRnJvbnRl
bmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOworCisgICAg
UmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwg
QVNDSUlMaXRlcmFsKCJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIikpOworICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwYXJhbWV0
ZXIiKSwgdG9Qcm90b2NvbFN0cmluZyhwYXJhbWV0ZXIpKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0
T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Cisg
ICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitA
ZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBv
cnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCit0eXBl
ZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSkgeworICAg
IFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkLAorICAgIFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtUmVkLAorICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW4sCisgICAg
VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVlLAorfTsKKworCisKK0Bwcm90b2NvbCBUZXN0
UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CitAcmVxdWlyZWQK
Ky0gKHZvaWQpY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazoodm9p
ZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lk
KF4pKFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJl
dHVyblZhbHVlIHJldHVyblZhbHVlKSlzdWNjZXNzQ2FsbGJhY2s7CitAZW5kCisKK19fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xF
dmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKWV2ZW50
V2l0aEVudW1QYXJhbWV0ZXJXaXRoUGFyYW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2
ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIpcGFyYW1ldGVyOworQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbElu
dGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK0BpbnRl
cmZhY2UgVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKFByaXZh
dGUpCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihJbnNwZWN0b3I6OkF1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKK0BlbmQKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29s
U3RyaW5nKFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtIHZhbHVlKQoreworICAgIHN3aXRjaCh2
YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1TaGFyZWQ6CisgICAg
ICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInNoYXJlZCIpOworICAgIGNhc2UgVGVzdFByb3RvY29s
VHlwZURvbWFpbkVudW1SZWQ6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInJlZCIpOwor
ICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1HcmVlbjoKKyAgICAgICAgcmV0dXJu
IEFTQ0lJTGl0ZXJhbCgiZ3JlZW4iKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtQmx1ZToKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYmx1ZSIpOworICAgIH0KK30K
KwordGVtcGxhdGU8PgoraW5saW5lIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtIGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAic2hh
cmVkIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkOwor
ICAgIGlmICh2YWx1ZSA9PSAicmVkIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtUmVkOworICAgIGlmICh2YWx1ZSA9PSAiZ3JlZW4iKQorICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1HcmVlbjsKKyAgICBpZiAodmFsdWUgPT0gImJsdWUi
KQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVlOworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51
bVNoYXJlZDsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVHlwZURvbWFpbkRvbWFpbikKKworKyAodm9p
ZClfcGFyc2VUeXBlRG9tYWluRW51bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoVHlwZURvbWFpbkRvbWFpbikKKworKyAodm9pZClfcGFyc2VUeXBlRG9tYWlu
RW51bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10p
OworICAgICpvdXRWYWx1ZSA9IEAoSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFBy
b3RvY29sVHlwZURvbWFpbkVudW0+KHBheWxvYWQpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVu
dW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBh
cmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0
ZXJzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU0N2JkZjkzZjA5Yjc0Y2Y4NWNiMTQ5ZDAyMzEy
YThjYmYwNzFmMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25h
bC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTE3OSBAQAorIyMjIEJlZ2luIEZp
bGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBEYXRhYmFzZS4KK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJEYXRhYmFzZURpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEYXRhYmFzZSIp
OworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0
aW9uYWxQYXJhbWV0ZXJzIiwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAi
dmFsdWVzIiwgInBheWxvYWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRl
Q29sb3JzIiwgInByaW50Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQo
IkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsIFsiY29sdW1uTmFtZXMi
LCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgInNxbEVycm9yIiwg
InNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOworSW5zcGVj
dG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiKTsKKyMjIyBFbmQgRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBl
dmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVz
LmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsK
K3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRp
c3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAg
ICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisK
KworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlv
bmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
KyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5k
aWYKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworY2xhc3MgRGF0YWJhc2VG
cm9udGVuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIERhdGFiYXNlRnJvbnRlbmREaXNwYXRj
aGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZy
b250ZW5kUm91dGVyKSB7IH0KKyAgICB2b2lkIGRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMo
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBj
b25zdCBTdHJpbmcqIGNvbnN0IG5vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IHRpbWVzdGFtcCwg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnMqIGNvbnN0IHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBT
dHJpbmcqIGNvbnN0IHByaW50Q29sb3IpOworICAgIHZvaWQgZGlkRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnMmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29s
b3IpOworcHJpdmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25h
bC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQgRGF0
YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25z
dCBTdHJpbmcqIGNvbnN0IG5vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IHRpbWVzdGFtcCwgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnMqIGNvbnN0IHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJp
bmcqIGNvbnN0IHByaW50Q29sb3IpCit7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJEYXRhYmFzZS5kaWRF
eGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIikpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKGNvbHVtbk5h
bWVzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1u
TmFtZXMiKSwgY29sdW1uTmFtZXMpOworICAgIGlmIChub3RlcykKKyAgICAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCAqbm90ZXMpOworICAgIGlmICh0
aW1lc3RhbXApCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgi
dGltZXN0YW1wIiksICp0aW1lc3RhbXApOworICAgIGlmICh2YWx1ZXMpCisgICAgICAgIHBhcmFt
c09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZhbHVlcyk7CisgICAg
aWYgKHBheWxvYWQpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFs
KCJwYXlsb2FkIiksICpwYXlsb2FkKTsKKyAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgIHBhcmFt
c09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgc3FsRXJyb3IpOwor
ICAgIGlmIChzY3JlZW5Db2xvcikKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCAqc2NyZWVuQ29sb3IpOworICAgIGlmIChhbHRlcm5h
dGVDb2xvcnMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJh
bHRlcm5hdGVDb2xvcnMiKSwgYWx0ZXJuYXRlQ29sb3JzKTsKKyAgICBpZiAocHJpbnRDb2xvcikK
KyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9y
IiksICpwcmludENvbG9yKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgicGFyYW1zIiksIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7CisKKyAgICBtX2Zyb250ZW5kUm91
dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit2b2lkIERh
dGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBj
b25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+
IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNx
bEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cyYgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29s
b3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKK3sKKyAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIp
LCBBU0NJSUxpdGVyYWwoIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIp
KTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJj
b2x1bW5OYW1lcyIpLCBjb2x1bW5OYW1lcyk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXREb3Vi
bGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdGltZXN0YW1wKTsKKyAgICBwYXJhbXNPYmpl
Y3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCB2YWx1ZXMpOworICAgIHBhcmFt
c09iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHBheWxvYWQpOworICAg
IHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgc3FsRXJy
b3IpOworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29s
b3IiKSwgc2NyZWVuQ29sb3IpOworICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRl
cmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgYWx0ZXJuYXRlQ29sb3JzKTsKKyAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgcHJpbnRDb2xvcik7Cisg
ICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBXVEZNb3Zl
KHBhcmFtc09iamVjdCkpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29s
IHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgRGF0YWJhc2UgeworY2xh
c3MgRXJyb3I7Cit9IC8vIERhdGFiYXNlCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMu
CisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogVW5pcXVlIGlkZW50
aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiAqLwordHlwZWRlZiBTdHJpbmcgRGF0YWJhc2VJZDsK
K3R5cGVkZWYgU3RyaW5nIFByaW1hcnlDb2xvcnM7Cit0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBD
b2xvckxpc3Q7Cit9IC8vIERhdGFiYXNlCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK25hbWVzcGFj
ZSBEYXRhYmFzZSB7CisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9yIDogcHVibGlj
IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7Cisg
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAg
ICAgICAgQ29kZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VT
ZXQgfCBDb2RlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xh
c3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisK
KyAgICAgICAgQnVpbGRlcihSZWY8LypFcnJvciovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkK
KyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3Mg
RXJyb3I7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0
PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2Vf
YWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoIm1lc3NhZ2UiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNz
YWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+
JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiY29kZSIpLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5zcGVj
dG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgcmV0
dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZyZXN1bHQpKTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
KyAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQorICAgICAqICAgICAu
c2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRDb2RlKC4uLikKKyAgICAgKiAgICAgLnJl
bGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCit9IC8vIERhdGFiYXNlCisKKworCit9IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13
aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFBy
b3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2
ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZl
bnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wu
aD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAq
ZGF0YWJhc2VFdmVudERpc3BhdGNoZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0
aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxl
cjsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX2RhdGFi
YXNlRXZlbnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwor
ICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RhdGFiYXNl
RXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAo
VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgKilkYXRhYmFzZUV2ZW50
RGlzcGF0Y2hlcgoreworICAgIGlmICghX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyKQorICAgICAg
ICBfZGF0YWJhc2VFdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRG9tYWlu
RXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOwor
ICAgIHJldHVybiBfZGF0YWJhc2VFdmVudERpc3BhdGNoZXI7Cit9CisKK0BlbmQKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVl
cy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXI7Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVy
ID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkaWRFeGVjdXRl
T3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KiopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFtcDooZG91Ymxl
ICopdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZhbHVlcyBwYXls
b2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopcGF5bG9hZCBzcWxFcnJvcjooVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJpbmcgKiopc2Ny
ZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJu
YXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5nICoqKXByaW50Q29sb3IKK3sKKyAgICBjb25z
dCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7
CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1u
TmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3Is
IEAic3FsRXJyb3IiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJB
TUVURVIoc2NyZWVuQ29sb3IsIEAic2NyZWVuQ29sb3IiKTsKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNv
bG9ycyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihw
cmludENvbG9yLCBAInByaW50Q29sb3IiKTsKKworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpz
b25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+
c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2Uu
ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIpKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGlmIChjb2x1
bW5OYW1lcykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNv
bHVtbk5hbWVzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KCgqY29sdW1uTmFtZXMpKSk7CisgICAg
aWYgKG5vdGVzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
Im5vdGVzIiksICgqbm90ZXMpKTsKKyAgICBpZiAodGltZXN0YW1wKQorICAgICAgICBwYXJhbXNP
YmplY3QtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCAoKnRpbWVzdGFtcCkp
OworICAgIGlmICh2YWx1ZXMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJ
TGl0ZXJhbCgidmFsdWVzIiksIFsoKnZhbHVlcykgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICBp
ZiAocGF5bG9hZCkKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwo
InBheWxvYWQiKSwgWygqcGF5bG9hZCkgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICBpZiAoc3Fs
RXJyb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3Fs
RXJyb3IiKSwgWygqc3FsRXJyb3IpIHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgaWYgKHNjcmVl
bkNvbG9yKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNj
cmVlbkNvbG9yIiksICgqc2NyZWVuQ29sb3IpKTsKKyAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQor
ICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29s
b3JzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KCgqYWx0ZXJuYXRlQ29sb3JzKSkpOworICAgIGlm
IChwcmludENvbG9yKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoInByaW50Q29sb3IiKSwgKCpwcmludENvbG9yKSk7CisgICAganNvbk1lc3NhZ2UtPnNldE9i
amVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOworICAg
IHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworLSAo
dm9pZClkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRp
bWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIHNxbEVycm9y
OihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5TU3Ry
aW5nICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJpbmcgKilwcmludENvbG9yCit7Cisg
ICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJv
dXRlcigpOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29s
dW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIp
OworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNjcmVlbkNvbG9y
LCBAInNjcmVlbkNvbG9yIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJB
TUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIp
OworCisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJt
ZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnMiKSk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0
ZXJhbCgiY29sdW1uTmFtZXMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsK
KyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG5vdGVz
KTsKKyAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIp
LCB0aW1lc3RhbXApOworICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgi
dmFsdWVzIiksIFt2YWx1ZXMgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICBwYXJhbXNPYmplY3Qt
PnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBbcGF5bG9hZCB0b0luc3BlY3Rvck9i
amVjdF0pOworICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJy
b3IiKSwgW3NxbEVycm9yIHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBzY3JlZW5Db2xvcik7CisgICAg
cGFyYW1zT2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBp
bnNwZWN0b3JTdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKKyAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgcHJpbnRDb2xvcik7CisgICAg
anNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBXVEZNb3ZlKHBh
cmFtc09iamVjdCkpOworICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
cjsKKworCisKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAq
LCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKKy8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKKy8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOworQGVuZAor
CisKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKKy0g
KHZvaWQpZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKilub3RlcyB0
aW1lc3RhbXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXBheWxvYWQgc3Fs
RXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2NyZWVuQ29sb3I6
KE5TU3RyaW5nICoqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3Ry
aW5nPiovICoqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKilwcmludENv
bG9yOworLSAodm9pZClkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFt
ZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAq
KW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2Fk
IHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopc3FsRXJyb3Igc2NyZWVuQ29s
b3I6KE5TU3RyaW5nICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJpbmcgKilwcmludENv
bG9yOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
SW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25h
bC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPYmpDRW51bVR5cGUgZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKKworKyAodm9pZClfcGFyc2VEYXRhYmFzZUlk
OihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQp
X3BhcnNlUHJpbWFyeUNvbG9yczooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VFcnJv
cjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChEYXRhYmFzZURvbWFpbikKKworKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihOU1N0
cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91
dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VQcmltYXJ5
Q29sb3JzOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAorewor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNz
XSk7CisgICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsKK30KKworKyAodm9pZClf
cGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5
bG9hZCwgW05TQXJyYXkvKjxOU1N0cmluZz4qLyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZUVycm9y
OihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNE
aWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQ
cml2YXRlLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNp
bXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
KworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IKKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwg
aWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKKyAgICBzZWxmLm1lc3NhZ2UgPSBw
YXlsb2FkW0AibWVzc2FnZSJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKKyAgICBzZWxmLmNvZGUgPSBbcGF5
bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilq
c29uT2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9i
amVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisK
KyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3Nh
Z2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwor
fQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zv
cktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAg
IFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29k
ZQoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbi1lcnJvciBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbi1lcnJvcgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lYzYzNmM1NGI3YzVjMTA3MDllMGMzYjY1OTRhOTJlNTFkYzJjNzUwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5q
c29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBVbmtub3duIHBsYXRmb3JtOiBpbnZhbGlk
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1hdmFpbGFiaWxpdHkuanNvbi1lcnJv
ciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWF2YWlsYWJpbGl0eS5qc29uLWVycm9yCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjkwZDcxOTVkNmFkMzZhMGQ2YmY3YTdhYmM3NDE3NmMwZjI4NjBmY2IKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1hdmFpbGFiaWxpdHkuanNvbi1lcnJvcgpAQCAt
MCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBhdmFpbGFi
aWxpdHkgaXMgYW4gdW5zdXBwb3J0ZWQgc3RyaW5nLiBXYXM6ICJ3ZWJiIiwgQWxsb3dlZCB2YWx1
ZXM6IHdlYgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxs
LXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29t
bWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNmNzU2ZGUz
MjUwNTBjMzNhNDkyY2Q1MGQ5ZWFkZjQyMzAzNWI2MTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJy
b3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjog
Y2FsbCBwYXJhbWV0ZXIgbGlzdCBmb3IgY29tbWFuZCBwcm9jZXNzUG9pbnRzIGhhcyBkdXBsaWNh
dGUgcGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1j
b21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24t
ZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmVhMTQ4ZmY2N2M5NjA5NDg4YTgwZTZmYTI1ZDNiZmE3NzhmNWRhMGEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0
ZXItbmFtZXMuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFp
biBzcGVjaWZpY2F0aW9uOiByZXR1cm4gcGFyYW1ldGVyIGxpc3QgZm9yIGNvbW1hbmQgcHJvY2Vz
c1BvaW50cyBoYXMgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jNzFiYmQyMWMyY2YwYzNiMDM4MDFkOTYzN2E0ZTZkMGZjMjVhYzQ0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVz
Lmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IE1hbGZvcm1lZCBkb21haW4gc3BlY2lm
aWNhdGlvbjogcGFyYW1ldGVyIGxpc3QgZm9yIGV2ZW50IHByb2Nlc3NlZFBvaW50cyBoYXMgZHVw
bGljYXRlIHBhcmFtZXRlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNh
dGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRl
LXR5cGUtZGVjbGFyYXRpb25zLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDQ3Y2RmOGUyOGU4NTY2
MTBhMjZmODE1NDk0M2YzNmNmOGI3ZDFmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwt
b24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAor
RVJST1I6IER1cGxpY2F0ZSB0eXBlIGRlY2xhcmF0aW9uOiBSdW50aW1lLlJlbW90ZU9iamVjdElk
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5q
c29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNv
bi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kNTM3NmE3N2E0NTVmZDE1ZjY3ZDhiY2I5MzVhNmJhNDM4YzBh
NTRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1i
ZXItbmFtZXMuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFp
biBzcGVjaWZpY2F0aW9uOiB0eXBlIGRlY2xhcmF0aW9uIGZvciBQb2ludCBoYXMgZHVwbGljYXRl
IG1lbWJlciBuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFs
dWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1l
cnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yNjU1YzJiOTA3ZTAyZTNlODRjYjNmNjZmYTFmNThlMTNkOWI3YjUz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpz
b24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFR5cGUgcmVmZXJlbmNlIHdpdGggZW51bSB2
YWx1ZXMgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBlbnVtIHZhbHVlLgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJv
ciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpz
b24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOTdiMmFmMGU0N2U5M2Y4MDQ5Nzk0NDQ3MjU3ZGYzMjcyM2Yw
NjgyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlv
bmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFRoZSAn
b3B0aW9uYWwnIGZsYWcgZm9yIGEgcGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1l
bWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlw
ZS1tZW1iZXIuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NmRmMzc1MGMxYTc3OTc4OTNjYmZiN2Uy
ODc2ZDkyY2NlY2MyZjkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXIt
dHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJP
UjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSB0eXBlIG1lbWJlciBtdXN0IGJlIGEgYm9vbGVh
biBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9u
YWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVk
LW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTdiMmFmMGU0
N2U5M2Y4MDQ5Nzk0NDQ3MjU3ZGYzMjcyM2YwNjgyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IK
QEAgLTAsMCArMSBAQAorRVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgcGFyYW1ldGVy
IG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXN0
cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1v
bi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44NmRmMzc1MGMxYTc3OTc4OTNjYmZiN2UyODc2ZDkyY2NlY2MyZjkxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNv
bi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSB0
eXBlIG1lbWJlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tZXJyb3Ig
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNv
bi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40MmY1NzUzYTQzOTYxNDRlYjU2NmM1YzU5NjhkMDQ5YWVjNjE4
MmRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVz
aW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFR5cGUg
cmVmZXJlbmNlIGNhbm5vdCBoYXZlIGJvdGggJ3R5cGUnIGFuZCAnJHJlZicga2V5cy4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNv
bi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUu
anNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNzZiYzFjNzc3M2FhMGRhOTg4NDljOTNjMzRjMzkyZjE2
Mjc2Mzk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1h
cy1wcmltaXRpdmUtdHlwZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUeXBlIHJl
ZmVyZW5jZSAnRGF0YWJhc2VJZCcgaXMgbm90IGEgcHJpbWl0aXZlIHR5cGUuIEFsbG93ZWQgdmFs
dWVzOiBpbnRlZ2VyLCBudW1iZXIsIHN0cmluZywgYm9vbGVhbiwgZW51bSwgb2JqZWN0LCBhcnJh
eSwgYW55CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRm
b3JtLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3Jt
Lmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWM2MzZjNTRiN2M1YzEwNzA5ZTBjM2I2NTk0YTkyZTUx
ZGMyYzc1MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWludmFs
aWQtcGxhdGZvcm0uanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogVW5rbm93biBwbGF0
Zm9ybTogaW52YWxpZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJj
YXNlLW5hbWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1u
YW1lLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGU0NjIyNTBjMGFmODBhMTc5ZTA2YWFmNDVkMjFl
YjU0NmRiODgxNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWxv
d2VyY2FzZS1uYW1lLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFR5cGVzIG11c3Qg
YmVnaW4gd2l0aCBhbiB1cHBlcmNhc2UgY2hhcmFjdGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFp
bC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJv
ciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0
aW9uLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmQzOGU2NDY3NWRhNWFlNWMyNjNkNTQ2ZTg1MzRi
NDlmM2I1ZTljOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBl
LXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAor
RVJST1I6IFR5cGUgcmVmZXJlbmNlICdkcmFnb24nIGlzIG5vdCBhIHByaW1pdGl2ZSB0eXBlLiBB
bGxvd2VkIHZhbHVlczogaW50ZWdlciwgbnVtYmVyLCBzdHJpbmcsIGJvb2xlYW4sIGVudW0sIG9i
amVjdCwgYXJyYXksIGFueQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUt
cmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25v
d24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
YWY2NjcyY2JlZjA5NjMwZmQ5YmU4ZmZhZGFjZTEyYzU2MTFjY2E4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpz
b24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IExvb2t1cCBmYWlsZWQgZm9yIHR5cGUgcmVm
ZXJlbmNlOiBDb2xvciAocmVmZXJlbmNlZCBmcm9tIGRvbWFpbjogRmFudGFzeSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3Vs
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mNGZiMjUzYzljM2RhODc5NWExMGVmOWVlOTRmMGM1OTQzN2QyOWNkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3Vh
cmRzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTE5OSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIE5ldHdvcmsxLgorSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsxLmxvYWRSZXNvdXJjZSIsIFtdLCBbXSk7CitJ
bnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMSIpOworCisvLyBOZXR3b3Jr
My4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJOZXR3b3JrM0Rpc3BhdGNoZXIgPSBJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQs
ICJOZXR3b3JrMyIpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJOZXR3b3JrMy5y
ZXNvdXJjZUxvYWRlZCIsIFtdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5l
dHdvcmszIik7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisj
IyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUt
Z3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2Ns
YXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJh
Y2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7
IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5k
RGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKyNpZiBQTEFURk9STShXRUJfQ09NTUFO
RFMpCitjbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbHRlcm5h
dGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZShsb25nIGNhbGxJZCkgPSAwOworfTsKKyNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09N
TUFORFMpCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9t
YWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKK2Ns
YXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gUExBVEZP
Uk0oV0VCX0NPTU1BTkRTKQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorCisjaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQorY2xhc3MgTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBsb2Fk
UmVzb3VyY2UoRXJyb3JTdHJpbmcmKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+TmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisjZW5kaWYgLy8gUExBVEZPUk0o
V0VCX0NPTU1BTkRTKQorCisjaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQorY2xhc3MgTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworcHJp
dmF0ZToKKyAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIo
QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikg
eyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRl
OgorICAgIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZgorcHJpdmF0ZToKKyAgICBOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKKyAgICBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2Vu
dCB7IG51bGxwdHIgfTsKK307CisjZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgiCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CisjaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQorTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6On5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorI2VuZGlmIC8v
IFBMQVRGT1JNKFdFQl9DT01NQU5EUykKKworI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKK1Jl
ZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpj
cmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30K
KworTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihC
YWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVy
KGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJO
ZXR3b3JrMSIpLCB0aGlzKTsKK30KKwordm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpk
aXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0
b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
cj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0
ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJh
bWV0ZXJzKTsKKworICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZSIpCisgICAgICAgIGxv
YWRSZXNvdXJjZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGVsc2UKKyAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIk5ldHdvcmsxIiwgJy4n
LCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7Cit9CisKK3ZvaWQgTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyNlbmRpZgorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5s
b2FkUmVzb3VyY2UoZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1
bHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7
Cit9CisjZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQorCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCisjaWYg
UExBVEZPUk0oV0VCX0VWRU5UUykKK2NsYXNzIE5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVyIHsK
K3B1YmxpYzoKKyAgICBOZXR3b3JrM0Zyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYg
ZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9Cisg
ICAgdm9pZCByZXNvdXJjZUxvYWRlZCgpOworcHJpdmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYg
bV9mcm9udGVuZFJvdXRlcjsKK307CisjZW5kaWYgLy8gUExBVEZPUk0oV0VCX0VWRU5UUykKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1m
ZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oIgorCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisjaWYgUExB
VEZPUk0oV0VCX0VWRU5UUykKK3ZvaWQgTmV0d29yazNGcm9udGVuZERpc3BhdGNoZXI6OnJlc291
cmNlTG9hZGVkKCkKK3sKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIk5ldHdvcmszLnJlc291cmNlTG9hZGVk
IikpOworCisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShXRUJfRVZFTlRTKQorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1
YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMu
aD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgor
I2lmIFBMQVRGT1JNKFdFQl9UWVBFUykKK25hbWVzcGFjZSBOZXR3b3JrMiB7CitjbGFzcyBOZXR3
b3JrRXJyb3I7Cit9IC8vIE5ldHdvcmsyCisjZW5kaWYgLy8gUExBVEZPUk0oV0VCX1RZUEVTKQor
Ly8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCisjaWYgUExBVEZPUk0oV0VC
X1RZUEVTKQorbmFtZXNwYWNlIE5ldHdvcmsyIHsKK2NsYXNzIE5ldHdvcmtFcnJvciA6IHB1Ymxp
YyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0gewor
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisg
ICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdl
U2V0IHwgQ29kZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNs
YXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQor
CisgICAgICAgIEJ1aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9yKi9JbnNwZWN0b3JPYmplY3Q+JiYg
b2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVu
ZCBjbGFzcyBOZXR3b3JrRXJyb3I7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHBy
b3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVh
ZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgi
Y29kZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7
CisgICAgICAgIH0KKworICAgICAgICBSZWY8TmV0d29ya0Vycm9yPiByZWxlYXNlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihO
ZXR3b3JrRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisK
KyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVh
c2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2Fz
dDxSZWY8TmV0d29ya0Vycm9yPio+KCZyZXN1bHQpKTsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8TmV0d29ya0Vy
cm9yPiByZXN1bHQgPSBOZXR3b3JrRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRNZXNz
YWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgp
OworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gTmV0d29yazIKKyNlbmRpZiAvLyBQTEFURk9S
TShXRUJfVFlQRVMpCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2Vu
ZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KKworQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcjsKKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworI2lmIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKK2Ns
YXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGlj
IEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIE9iakNJ
bnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsx
RG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZp
cnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRlOworcHJpdmF0
ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPj4g
bV9kZWxlZ2F0ZTsKK307CisjZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9t
YWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisjaWYgUExBVEZPUk0oV0VCX0NPTU1BTkRTKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKQoreworICAg
IGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9
IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBs
b2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2tdOworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRT
KQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRl
LWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wu
aD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNl
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9t
aWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmsxSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5l
dHdvcmsxRG9tYWluSGFuZGxlcj4gbmV0d29yazFIYW5kbGVyOworQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAq
bmV0d29yazNFdmVudERpc3BhdGNoZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1k
b21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250
cm9sbGVyOworICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gX25ldHdv
cmsxSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hl
ciAqX25ldHdvcmszRXZlbnREaXNwYXRjaGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIK
K3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250
cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBb
X25ldHdvcmsxSGFuZGxlciByZWxlYXNlXTsKKyAgICBbX25ldHdvcmszRXZlbnREaXNwYXRjaGVy
IHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXROZXR3b3Jr
MUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4paGFuZGxlcgor
eworICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrMUhhbmRsZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOworICAgIF9uZXR3b3JrMUhhbmRsZXIg
PSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gc3Rk
OjptYWtlX3VuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4oaGFu
ZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IHN0ZDo6bWFrZV91bmlxdWU8QWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciwgQWx0ZXJuYXRl
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4+KEFTQ0lJTGl0ZXJhbCgiTmV0d29yazEiKSwgKl9j
b250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKKyAgICBfY29udHJvbGxl
ci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Cit9CisKKy0gKGlk
PFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4pbmV0d29yazFIYW5kbGVyCit7Cisg
ICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7Cit9CisKKy0gKFRlc3RQcm90b2NvbE5ldHdvcmsz
RG9tYWluRXZlbnREaXNwYXRjaGVyICopbmV0d29yazNFdmVudERpc3BhdGNoZXIKK3sKKyAgICBp
ZiAoIV9uZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX25ldHdvcmszRXZlbnREaXNw
YXRjaGVyID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxv
Y10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKKyAgICByZXR1cm4gX25ldHdvcmsz
RXZlbnREaXNwYXRjaGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERp
c3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCit1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sTmV0d29y
azNEb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Cit7CisgICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsK
KyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClyZXNvdXJjZUxvYWRlZAoreworICAgIGNv
bnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIo
KTsKKworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
bWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiKSk7CisgICAg
cm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24v
Rm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yOworCisK
KworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2Ug
VGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAq
LCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKKy8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKKy8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOworQGVuZAor
CitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyIDxOU09iamVjdD4K
K0ByZXF1aXJlZAorLSAodm9pZClsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazoodm9pZChe
KShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4p
KCkpc3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgi
ZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERp
c3BhdGNoZXIgOiBOU09iamVjdAorLSAodm9pZClyZXNvdXJjZUxvYWRlZDsKK0BlbmQKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrM0Rv
bWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250
cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1n
dWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoTmV0d29yazJEb21haW4pCisKKysgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9y
OihUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zIChOZXR3b3JrMkRvbWFpbikKKworKyAodm9pZClfcGFyc2VOZXR3b3JrRXJy
b3I6KFRlc3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9j
b2xOZXR3b3JrMk5ldHdvcmtFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwor
fQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
bW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JWYWx1ZXMuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CisKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbE5ldHdv
cmsyTmV0d29ya0Vycm9yCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51
bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNz
YWdlIik7CisgICAgc2VsZi5tZXNzYWdlID0gcGF5bG9hZFtAIm1lc3NhZ2UiXTsKKworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJj
b2RlIik7CisgICAgc2VsZi5jb2RlID0gW3BheWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsK
KworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVj
dDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdAoreworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W2pzb25PYmplY3QgdG9JbnNwZWN0b3JP
YmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdl
IGNvZGU6KGludCljb2RlCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAg
ICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOworCisgICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZTsK
KyAgICBzZWxmLmNvZGUgPSBjb2RlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
c2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCit7CisgICAgW3N1cGVyIHNldFN0cmluZzpt
ZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAoTlNTdHJpbmcgKiltZXNzYWdlCit7
CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKHZv
aWQpc2V0Q29kZTooaW50KWNvZGUKK3sKKyAgICBbc3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktl
eTpAImNvZGUiXTsKK30KKworLSAoaW50KWNvZGUKK3sKKyAgICByZXR1cm4gW3N1cGVyIGludGVn
ZXJGb3JLZXk6QCJjb2RlIl07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpz
b24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI4ZjY4NzJjZmM5NDJlNTc0YzgzN2ZiYzcyNzhjMGE4Mzdi
NGI2M2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uLXJlc3VsdApAQCAtMCwwICsxLDg3OSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1h
bmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVy
ZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBz
ZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hl
cikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNw
YXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1k
aWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1p
ZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJv
bnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIK
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQt
ZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBl
cy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIFR5cGVkZWZzLgorbmFtZXNw
YWNlIFJ1bnRpbWUgeworLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBT
dHJpbmcgUmVtb3RlT2JqZWN0SWQ7Cit9IC8vIFJ1bnRpbWUKKworbmFtZXNwYWNlIFJ1bnRpbWUy
IHsKKy8qIFVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4gKi8KK3R5cGVkZWYgU3RyaW5nIFJlbW90
ZU9iamVjdElkOworfSAvLyBSdW50aW1lMgorLy8gRW5kIG9mIHR5cGVkZWZzLgorCisKKworfSAv
LyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJv
dG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Cisj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUt
dHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlw
ZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitf
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1l
LXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRy
b2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIg
aW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChj
b250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNl
bGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKwor
QGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1l
LXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKwor
CisKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUt
aWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT2JqQ0VudW1UeXBlIGZyb21Q
cm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKKworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQ
YXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZVJl
bW90ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKKworQGVuZAorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRp
bWUyRG9tYWluKQorCisrICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU1N0cmluZyAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lk
KV9wYXJzZVJlbW90ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwg
W05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsK
K30KKworQGVuZAorQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAo
UnVudGltZTJEb21haW4pCisKKysgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3RyaW5n
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFs
dWUgPSAoTlNTdHJpbmcgKilwYXlsb2FkOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBl
LWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorI2ltcG9ydCA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NoYWRvd2Vk
LW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlv
bmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYjY5MjA5M2MxZWIwMjk2
ZGY5NDIzNGIzMGJkMjg1N2QwZjI1YmVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hhZG93
ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTA4NyBAQAor
IyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6
IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5
cGVzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Cisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3Zl
KGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVy
KCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToK
KyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9Owor
CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlv
bmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAi
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7
CisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIFJ1bnRpbWUgeworY2xhc3Mg
S2V5UGF0aDsKK30gLy8gUnVudGltZQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgor
CisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50
VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNv
bnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZh
bHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRl
c3RIZWxwZXJzCisKK25hbWVzcGFjZSBSdW50aW1lIHsKKy8qIEtleSBwYXRoLiAqLworY2xhc3Mg
S2V5UGF0aCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVibGlj
OgorICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRp
bmcgS2V5UGF0aC4KKyAgICBlbnVtIGNsYXNzIFR5cGUgeworICAgICAgICBOdWxsID0gMCwKKyAg
ICAgICAgU3RyaW5nID0gMSwKKyAgICAgICAgQXJyYXkgPSAyLAorICAgIH07IC8vIGVudW0gY2xh
c3MgVHlwZQorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIFR5
cGVTZXQgPSAxIDw8IDAsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChUeXBlU2V0KQorICAgIH07
CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJp
dmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8
LypLZXlQYXRoKi9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jl
c3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBLZXlQYXRoOworICAgIHB1Ymxp
YzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZSB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVT
ZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJ0eXBlIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxUeXBlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPEtleVBhdGg+
IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKEtleVBhdGgpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5u
b3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1f
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVp
bnRlcnByZXRfY2FzdDxSZWY8S2V5UGF0aD4qPigmcmVzdWx0KSk7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPEtl
eVBhdGg+IHJlc3VsdCA9IEtleVBhdGg6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRUeXBlKC4u
LikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2Jq
ZWN0QmFzZTo6c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic3RyaW5nIiksIHZhbHVlKTsKKyAgICB9
CisKKyAgICB2b2lkIHNldEFycmF5KFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxT
dHJpbmc+PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldEFy
cmF5KEFTQ0lJTGl0ZXJhbCgiYXJyYXkiKSwgV1RGTW92ZSh2YWx1ZSkpOworICAgIH0KK307CisK
K30gLy8gUnVudGltZQorCisKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KK3N0ZDo6b3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlw
ZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBFbnVtcyBp
biB0aGUgJ1J1bnRpbWUnIERvbWFpbgordGVtcGxhdGU8Pgorc3RkOjpvcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3Qg
U3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK30gLy8gbmFtZXNwYWNl
IFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwt
dHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisK
K25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVt
X2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJudWxsIiwKKyAgICAic3RyaW5nIiwKKyAgICAi
YXJyYXkiLAorfTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Cisg
ICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0
aGUgJ1J1bnRpbWUnIERvbWFpbgordGVtcGxhdGU8Pgorc3RkOjpvcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJp
bmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3Ry
aW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50
VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6S2V5UGF0aDo6VHlwZTo6TnVsbCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpTdHJpbmcsCisgICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6QXJyYXksCisgICAgfTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29s
U3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAg
ICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlw
ZSljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKKwor
fSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29s
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlv
bmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFn
ZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVy
Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29u
dHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAg
W3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERp
c3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRj
aGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aDsKKwor
Cit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5
cGUpIHsKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVOdWxsLAorICAgIFRlc3RQ
cm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZVN0cmluZywKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1l
S2V5UGF0aFR5cGVBcnJheSwKK307CisKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRl
ZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoIDogUldJUHJv
dG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rp
b25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhUeXBlOihUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlw
ZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFRlc3RQcm90
b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSB0eXBlOworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpzdHJpbmc7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICphcnJheTsKK0BlbmQK
KworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0
aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPYmpDRW51bVR5cGUgZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKK2lubGluZSBTdHJpbmcgdG9Q
cm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUgdmFsdWUpCit7Cisg
ICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5
cGVOdWxsOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJudWxsIik7CisgICAgY2FzZSBU
ZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVTdHJpbmc6CisgICAgICAgIHJldHVybiBBU0NJ
SUxpdGVyYWwoInN0cmluZyIpOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhU
eXBlQXJyYXk6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImFycmF5Iik7CisgICAgfQor
fQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlIGZy
b21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9
PSAibnVsbCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVO
dWxsOworICAgIGlmICh2YWx1ZSA9PSAic3RyaW5nIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZVN0cmluZzsKKyAgICBpZiAodmFsdWUgPT0gImFycmF5IikK
KyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZUFycmF5OworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lS2V5
UGF0aFR5cGVOdWxsOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVu
dGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VLZXlQYXRoOihUZXN0UHJvdG9jb2xSdW50aW1l
S2V5UGF0aCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitA
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWlu
KQorCisrICh2b2lkKV9wYXJzZUtleVBhdGg6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZh
bHVlID0gW1tUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aCBhbGxvY10gaW5pdFdpdGhQYXlsb2Fk
OnBheWxvYWRdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1z
ZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bFJ1bnRpbWVLZXlQYXRoCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51
bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInR5cGUiXSwgQCJ0eXBlIik7
CisgICAgc2VsZi50eXBlID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFJ1bnRpbWVL
ZXlQYXRoVHlwZT4ocGF5bG9hZFtAInR5cGUiXSk7CisKKyAgICBzZWxmLnN0cmluZyA9IHBheWxv
YWRbQCJzdHJpbmciXTsKKworICAgIHNlbGYuYXJyYXkgPSBvYmpjQXJyYXlGcm9tUGF5bG9hZDxO
U1N0cmluZz4ocGF5bG9hZFtAImFycmF5Il0pOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilq
c29uT2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9i
amVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhUeXBlOihUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZQoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi50
eXBlID0gdHlwZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldFR5cGU6KFRl
c3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlCit7CisgICAgW3N1cGVyIHNldFN0cmlu
Zzp0b1Byb3RvY29sU3RyaW5nKHR5cGUpIGZvcktleTpAInR5cGUiXTsKK30KKworLSAoVGVzdFBy
b3RvY29sUnVudGltZUtleVBhdGhUeXBlKXR5cGUKK3sKKyAgICByZXR1cm4gZnJvbVByb3RvY29s
U3RyaW5nPFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZT4oW3N1cGVyIHN0cmluZ0Zvcktl
eTpAInR5cGUiXSk7Cit9CisKKy0gKHZvaWQpc2V0U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZwor
eworICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5nIGZvcktleTpAInN0cmluZyJdOworfQorCist
IChOU1N0cmluZyAqKXN0cmluZworeworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAi
c3RyaW5nIl07Cit9CisKKy0gKHZvaWQpc2V0QXJyYXk6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KWFycmF5Cit7CisgICAgW3N1cGVyIHNldEluc3BlY3RvckFycmF5Omluc3BlY3RvclN0cmluZ0Fy
cmF5KGFycmF5KSBmb3JLZXk6QCJhcnJheSJdOworfQorCistIChOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKilhcnJheQoreworICAgIHJldHVybiBvYmpjU3RyaW5nQXJyYXkoW3N1cGVyIGluc3BlY3Rv
ckFycmF5Rm9yS2V5OkAiYXJyYXkiXSk7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFs
aWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGE5ZTZiZDhl
Yjk4NTg1NTQ0MjY4YmNiNzUyMmY4N2Y5MjNjNzY5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdApAQCAt
MCwwICsxLDg1NiBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxp
YXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworCisj
IyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1p
dGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNl
dEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVy
KSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFj
a2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
ZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlw
ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CisjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmCisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUt
dHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgor
CisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisK
K25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBSdW50
aW1lIHsKKy8qIFVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4gKi8KK3R5cGVkZWYgaW50IFJlbW90
ZU9iamVjdElkOworfSAvLyBSdW50aW1lCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKKworCit9IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1l
c3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5j
cHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2Vk
LXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworCisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1
ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10
eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
biA6IE5TT2JqZWN0CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0K
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFz
ZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwor
fQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOwor
ICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxl
cik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+
CisKKworCisKKworCisKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCisK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZl
cnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBP
YmpDRW51bVR5cGU+CitPYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TTnVt
YmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCisK
KysgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilw
YXlsb2FkOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJy
YXktdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5q
c29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOGY4OWE5NTg2N2IzYjU1MDc1MTdhZjNkMzNhN2NiYzdm
NTFmZDVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10
eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTAyMyBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIERlYnVnZ2VyLgorSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckVudW0oIkRlYnVnZ2VyLlJlYXNvbiIsIHtEaWVkOiAiRGllZCIsIEZhaW50ZWQ6ICJGYWlu
dGVkIiwgSHVuZ3J5OiAiSHVuZ3J5In0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5k
Q29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdm9p
ZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0
Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQorICAg
IEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1f
YmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tlbmRE
aXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRl
bmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kUm91dGVyLmgiCisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Cisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKwor
CituYW1lc3BhY2UgUHJvdG9jb2wgeworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVz
cGFjZSBEZWJ1Z2dlciB7CitlbnVtIGNsYXNzIFJlYXNvbjsKK30gLy8gRGVidWdnZXIKKy8vIEVu
ZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBE
ZWJ1Z2dlciB7Cit0eXBlZGVmIGludCBCcmVha3BvaW50SWQ7Cit9IC8vIERlYnVnZ2VyCisKK25h
bWVzcGFjZSBSdW50aW1lIHsKK3R5cGVkZWYgaW50IE9iamVjdElkOwordHlwZWRlZiBJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxpbnQ+IEx1Y2t5TnVtYmVyczsKK3R5cGVkZWYgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiBCYWJ5TmFtZXM7Cit0eXBlZGVmIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdElkPiBO
ZXdPYmplY3RzOwordHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkPiBPbGRPYmplY3RzOwordHlwZWRlZiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6
UmVhc29uPiBTdG9wUmVhc29uczsKK30gLy8gUnVudGltZQorLy8gRW5kIG9mIHR5cGVkZWZzLgor
CituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUo
aW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50
VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0
YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxw
ZXJzCisKK25hbWVzcGFjZSBEZWJ1Z2dlciB7CisvKiAgKi8KK2VudW0gY2xhc3MgUmVhc29uIHsK
KyAgICBEaWVkID0gMCwKKyAgICBGYWludGVkID0gMSwKKyAgICBIdW5ncnkgPSAyLAorfTsgLy8g
ZW51bSBjbGFzcyBSZWFzb24KK30gLy8gRGVidWdnZXIKKworCisKK25hbWVzcGFjZSBUZXN0SGVs
cGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitzdGQ6Om9wdGlv
bmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJp
bmcmKTsKKworLy8gRW51bXMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCit0ZW1wbGF0ZTw+Citz
dGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29u
Pihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworfSAvLyBu
YW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29s
IHsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgIkRpZWQiLAorICAgICJGYWludGVkIiwK
KyAgICAiSHVuZ3J5IiwKK307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29k
ZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51
bXMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCit0ZW1wbGF0ZTw+CitzdGQ6Om9wdGlvbmFsPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPihjb25zdCBTdHJpbmcm
IHByb3RvY29sU3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1
ZXNbXSA9IHsKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6
UmVhc29uOjpEaWVkLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVn
Z2VyOjpSZWFzb246OkZhaW50ZWQsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGVidWdnZXI6OlJlYXNvbjo6SHVuZ3J5LAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCAzOyArK2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0
YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24pY29uc3RhbnRWYWx1ZXNbaV07CisKKyAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJz
CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvclZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFy
cmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
YXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRl
cm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgorewor
ICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYg
KCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAg
ICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4K
KwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJh
eS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rv
ci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCit0eXBlZGVmIE5TX0VOVU0oTlNJ
bnRlZ2VyLCBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbikgeworICAgIFRlc3RQcm90b2NvbERl
YnVnZ2VyUmVhc29uRGllZCwKKyAgICBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkZhaW50ZWQs
CisgICAgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25IdW5ncnksCit9OworCisKKworCisKKwor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclZhbHVlcy5oPgorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVy
bmFsLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10
eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xB
cnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpOworCisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhU
ZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbiB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsK
KyAgICBjYXNlIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRGllZDoKKyAgICAgICAgcmV0dXJu
IEFTQ0lJTGl0ZXJhbCgiRGllZCIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGVidWdnZXJSZWFz
b25GYWludGVkOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJGYWludGVkIik7CisgICAg
Y2FzZSBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkh1bmdyeToKKyAgICAgICAgcmV0dXJuIEFT
Q0lJTGl0ZXJhbCgiSHVuZ3J5Iik7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgVGVz
dFByb3RvY29sRGVidWdnZXJSZWFzb24gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJEaWVkIikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERlYnVnZ2VyUmVhc29uRGllZDsKKyAgICBpZiAodmFsdWUgPT0gIkZhaW50ZWQiKQor
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25GYWludGVkOworICAgIGlm
ICh2YWx1ZSA9PSAiSHVuZ3J5IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERlYnVnZ2Vy
UmVhc29uSHVuZ3J5OworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBUZXN0
UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkRpZWQ7Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoRGVidWdnZXJEb21haW4pCisKKysgKHZvaWQpX3BhcnNlQnJlYWtwb2ludElk
OihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQp
X3BhcnNlUmVhc29uOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKKworQGVuZAorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRp
bWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VMdWNreU51bWJlcnM6KE5T
QXJyYXkvKjxOU051bWJlcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
KysgKHZvaWQpX3BhcnNlQmFieU5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZU5ld09iamVjdHM6KE5T
QXJyYXkvKjxOU051bWJlcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
KysgKHZvaWQpX3BhcnNlT2xkT2JqZWN0czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VTdG9wUmVhc29uczoo
TlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMg
KERlYnVnZ2VyRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUJyZWFrcG9pbnRJZDooTlNOdW1iZXIg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOworICAgICpvdXRWYWx1
ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlUmVhc29uOihOU051
bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91
dFZhbHVlID0gQChJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEZWJ1
Z2dlclJlYXNvbj4ocGF5bG9hZCkpOworfQorCitAZW5kCitAaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZU9i
amVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAorewor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNz
XSk7CisgICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKK30KKworKyAodm9pZClf
cGFyc2VMdWNreU51bWJlcnM6KE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TQXJyYXkvKjxOU051bWJlcj4qLyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9
IChOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZUJh
YnlOYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlTmV3T2JqZWN0czoo
TlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
Cit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8q
PE5TTnVtYmVyPiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU051bWJl
cj4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlT2xkT2JqZWN0czooTlNBcnJheS8q
PE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TTnVtYmVy
PiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKXBh
eWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlU3RvcFJlYXNvbnM6KE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0cmluZz4qLyBjbGFz
c10pOworICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2FkOwor
fQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
bW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JW
YWx1ZXMuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1t
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmIwYjY4MDMyOWRlZTMzMzkxYzUxNDBlZTEzYWUwNmQ2OTk3ZThhNjMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdApAQCAt
MCwwICsxLDEwMzEgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVu
dW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
Ky8vIFJ1bnRpbWUuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiUnVudGltZS5GYXJt
QW5pbWFscyIsIHtQaWdzOiAiUGlncyIsIENvd3M6ICJDb3dzIiwgQ2F0czogIkNhdHMiLCBIZW5z
OiAiSGVucyJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJSdW50aW1lLlR3b0xl
Z2dlZEFuaW1hbHMiLCB7RHVja3M6ICJEdWNrcyIsIEhlbnM6ICJIZW5zIiwgQ3Jvd3M6ICJDcm93
cyIsIEZsYW1pbmdvczogIkZsYW1pbmdvcyJ9KTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFj
a2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAg
dm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlz
cGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQor
ICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJu
IG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJhY2tl
bmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JT
dHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRl
bmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oIgorCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKwor
bmFtZXNwYWNlIFByb3RvY29sIHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3Bh
Y2UgUnVudGltZSB7CitlbnVtIGNsYXNzIEZhcm1BbmltYWxzOworZW51bSBjbGFzcyBUd29MZWdn
ZWRBbmltYWxzOworfSAvLyBSdW50aW1lCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMu
CisKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVt
Q29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50
VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
VGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIFJ1bnRpbWUgeworLyogICovCitlbnVtIGNsYXNzIEZh
cm1BbmltYWxzIHsKKyAgICBQaWdzID0gMCwKKyAgICBDb3dzID0gMSwKKyAgICBDYXRzID0gMiwK
KyAgICBIZW5zID0gMywKK307IC8vIGVudW0gY2xhc3MgRmFybUFuaW1hbHMKKy8qICAqLworZW51
bSBjbGFzcyBUd29MZWdnZWRBbmltYWxzIHsKKyAgICBEdWNrcyA9IDQsCisgICAgSGVucyA9IDMs
CisgICAgQ3Jvd3MgPSA1LAorICAgIEZsYW1pbmdvcyA9IDYsCit9OyAvLyBlbnVtIGNsYXNzIFR3
b0xlZ2dlZEFuaW1hbHMKK30gLy8gUnVudGltZQorCisKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJz
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KK3N0ZDo6b3B0aW9uYWw8
UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYp
OworCisvLyBFbnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgordGVtcGxhdGU8Pgorc3RkOjpv
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1Bbmlt
YWxzPihjb25zdCBTdHJpbmcmKTsKK3RlbXBsYXRlPD4KK3N0ZDo6b3B0aW9uYWw8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNv
bnN0IFN0cmluZyYpOworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCit9IC8vIG5hbWVz
cGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisK
K25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVt
X2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJQaWdzIiwKKyAgICAiQ293cyIsCisgICAgIkNh
dHMiLAorICAgICJIZW5zIiwKKyAgICAiRHVja3MiLAorICAgICJDcm93cyIsCisgICAgIkZsYW1p
bmdvcyIsCit9OworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAg
ICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKy8vIEVudW1zIGluIHRo
ZSAnUnVudGltZScgRG9tYWluCit0ZW1wbGF0ZTw+CitzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+KGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVl
c1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZh
cm1BbmltYWxzOjpQaWdzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OkZhcm1BbmltYWxzOjpDb3dzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpDYXRzLAorICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpIZW5zLAorICAgIH07CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmlu
ZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAg
ICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzKWNvbnN0
YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKwordGVtcGxhdGU8
Pgorc3RkOjpvcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRB
bmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6VHdvTGVnZ2VkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sK
KyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RHVj
a3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVn
Z2VkQW5pbWFsczo6SGVucywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpDcm93cywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpGbGFtaW5nb3MsCisgICAg
fTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYgKHByb3Rv
Y29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAg
ICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2Vk
QW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9
CisKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworCisKK30gLy8gbmFtZXNwYWNlIFBy
b3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworCisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0
UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitA
aW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9s
bGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwor
ICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc3VwZXIgZGVh
bGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMu
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVu
dW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisK
KworCisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJt
QW5pbWFscykgeworICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc1BpZ3MsCisgICAg
VGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ293cywKKyAgICBUZXN0UHJvdG9jb2xSdW50
aW1lRmFybUFuaW1hbHNDYXRzLAorICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0hl
bnMsCit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xSdW50aW1l
VHdvTGVnZ2VkQW5pbWFscykgeworICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmlt
YWxzRHVja3MsCisgICAgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNIZW5zLAor
ICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzQ3Jvd3MsCisgICAgVGVzdFBy
b3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNGbGFtaW5nb3MsCit9OworCisKKworCisKKwor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21l
bnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJu
YWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlw
ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJy
YXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgT2JqQ0VudW1UeXBlPgorT2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKTsKKworCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVz
dFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkg
eworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzUGlnczoKKyAgICAgICAg
cmV0dXJuIEFTQ0lJTGl0ZXJhbCgiUGlncyIpOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGlt
ZUZhcm1BbmltYWxzQ293czoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiQ293cyIpOwor
ICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ2F0czoKKyAgICAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgiQ2F0cyIpOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZUZh
cm1BbmltYWxzSGVuczoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiSGVucyIpOworICAg
IH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFs
cyBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFs
dWUgPT0gIlBpZ3MiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1Bbmlt
YWxzUGlnczsKKyAgICBpZiAodmFsdWUgPT0gIkNvd3MiKQorICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUnVudGltZUZhcm1BbmltYWxzQ293czsKKyAgICBpZiAodmFsdWUgPT0gIkNhdHMiKQor
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzQ2F0czsKKyAgICBp
ZiAodmFsdWUgPT0gIkhlbnMiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUZh
cm1BbmltYWxzSGVuczsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVGVz
dFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzUGlnczsKK30KKworaW5saW5lIFN0cmluZyB0b1By
b3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzIHZhbHVlKQor
eworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xl
Z2dlZEFuaW1hbHNEdWNrczoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiRHVja3MiKTsK
KyAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzSGVuczoKKyAgICAg
ICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiSGVucyIpOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVu
dGltZVR3b0xlZ2dlZEFuaW1hbHNDcm93czoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
Q3Jvd3MiKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzRmxh
bWluZ29zOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJGbGFtaW5nb3MiKTsKKyAgICB9
Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5p
bWFscyBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAo
dmFsdWUgPT0gIkR1Y2tzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29M
ZWdnZWRBbmltYWxzRHVja3M7CisgICAgaWYgKHZhbHVlID09ICJIZW5zIikKKyAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzSGVuczsKKyAgICBpZiAodmFs
dWUgPT0gIkNyb3dzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdn
ZWRBbmltYWxzQ3Jvd3M7CisgICAgaWYgKHZhbHVlID09ICJGbGFtaW5nb3MiKQorICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNGbGFtaW5nb3M7CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29M
ZWdnZWRBbmltYWxzRHVja3M7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1
bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlRmFybUFuaW1hbHM6KE5TTnVtYmVyICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VUd29MZWdnZWRB
bmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50
aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUZhcm1BbmltYWxzOihOU051bWJlciAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gQChJ
bnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1h
bHM+KHBheWxvYWQpKTsKK30KKworKyAodm9pZClfcGFyc2VUd29MZWdnZWRBbmltYWxzOihOU051
bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91
dFZhbHVlID0gQChJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xSdW50
aW1lVHdvTGVnZ2VkQW5pbWFscz4ocGF5bG9hZCkpOworfQorCitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgor
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorI2ltcG9ydCA8d3RmL0Fz
c2VydGlvbnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24t
b2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWIwMzMxMmZlMmIwNTNmYThlYmM0
Y2IxNWYwYzFkZmUyOTAyNDM1YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFy
YXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxOTgxIEBACisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6
CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+
JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVy
KTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRy
PEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10
eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVk
ZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmCisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
Y2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVu
ZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKy8vIEZvcndhcmQgZGVjbGFy
YXRpb25zLgorbmFtZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIEVycm9yOworY2xhc3MgT3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGU7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7CitjbGFzcyBPYmplY3RX
aXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOworY2xhc3MgRHVtbXlPYmplY3Q7Cit9IC8vIERhdGFi
YXNlCisKK25hbWVzcGFjZSBUZXN0IHsKK2NsYXNzIFBhcmFtZXRlckJ1bmRsZTsKK30gLy8gVGVz
dAorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKy8vIFR5cGVkZWZzLgorbmFt
ZXNwYWNlIERhdGFiYXNlIHsKK3R5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBFcnJvckxpc3Q7Cit9IC8vIERhdGFi
YXNlCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiBEYXRh
YmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwg
MSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07
CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJp
dmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8
LypFcnJvciovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1
bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CisgICAgcHVibGljOgor
CisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBT
dHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwgdmFsdWUp
OworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9
CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQp
LCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJ
bnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiY29kZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPENvZGVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8RXJyb3I+IHJl
bGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
bGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nh
c3QpOworCisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3Vs
dC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZyZXN1bHQpKTsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8RXJyb3I+IHJl
c3VsdCA9IEVycm9yOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAg
ICogICAgIC5zZXRDb2RlKC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAg
ICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAg
ICB9Cit9OworCitjbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IDAKKyAgICB9OworCisgICAg
dGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6Cisg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qT3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGUqL0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAg
ICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIE9wdGlvbmFsUGFy
YW1ldGVyQnVuZGxlOworICAgIHB1YmxpYzoKKworICAgICAgICBSZWY8T3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGU+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlKSA9PSBzaXpl
b2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAg
ICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlPio+KCZyZXN1bHQpKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8T3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGU+IHJlc3VsdCA9IE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAgICAq
ICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKworICAgIHZvaWQgc2V0Q29sdW1uTmFt
ZXMoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IHZhbHVlKQorICAg
IHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJj
b2x1bW5OYW1lcyIpLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorCisgICAgdm9pZCBzZXROb3Rl
cyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFz
ZTo6c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgdmFsdWUpOworICAgIH0KKworICAg
IHZvaWQgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEluc3BlY3Rv
ck9iamVjdEJhc2U6OnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB2YWx1ZSk7
CisgICAgfQorCisgICAgdm9pZCBzZXRWYWx1ZXMoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9i
amVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorCisg
ICAgdm9pZCBzZXRQYXlsb2FkKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldFZhbHVlKEFTQ0lJTGl0
ZXJhbCgicGF5bG9hZCIpLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRF
cnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdChBU0NJSUxpdGVy
YWwoImVycm9yIiksIFdURk1vdmUodmFsdWUpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEVycm9y
TGlzdChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yTGlzdD4gdmFs
dWUpCisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRBcnJheShBU0NJSUxp
dGVyYWwoImVycm9yTGlzdCIpLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorfTsKKworY2xhc3Mg
UGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7
CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAg
Q29sdW1uTmFtZXNTZXQgPSAxIDw8IDAsCisgICAgICAgIE5vdGVzU2V0ID0gMSA8PCAxLAorICAg
ICAgICBUaW1lc3RhbXBTZXQgPSAxIDw8IDIsCisgICAgICAgIFZhbHVlc1NldCA9IDEgPDwgMywK
KyAgICAgICAgUGF5bG9hZFNldCA9IDEgPDwgNCwKKyAgICAgICAgRXJyb3JTZXQgPSAxIDw8IDUs
CisgICAgICAgIEVycm9yTGlzdFNldCA9IDEgPDwgNiwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0g
KENvbHVtbk5hbWVzU2V0IHwgTm90ZXNTZXQgfCBUaW1lc3RhbXBTZXQgfCBWYWx1ZXNTZXQgfCBQ
YXlsb2FkU2V0IHwgRXJyb3JTZXQgfCBFcnJvckxpc3RTZXQpCisgICAgfTsKKworICAgIHRlbXBs
YXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKlBhcmFtZXRlckJ1
bmRsZSovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQo
V1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
KyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgUGFyYW1ldGVyQnVuZGxlOworICAgIHB1
YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1
bW5OYW1lcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5O
YW1lc1NldCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIHZhbHVlKTsK
KyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7CisgICAgICAg
IH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhjb25zdCBT
dHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5X3NldCk7CisgICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgdmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb3Rlc1NldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGlt
ZXN0YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdmFsdWUpOwor
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+KCk7CisgICAgICAgIH0K
KworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxy
ZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwo
InZhbHVlcyIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1Nl
dD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYg
c2V0UGF5bG9hZChSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwg
cHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3NldCk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiZXJyb3IiKSwgdmFs
dWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4oKTsKKyAgICAgICAg
fQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvckxpc3RTZXQ+JiBzZXRFcnJvckxpc3Qo
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxpc3Q+IHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JMaXN0
U2V0KSwgcHJvcGVydHlfZXJyb3JMaXN0X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImVycm9yTGlzdCIpLCB2YWx1ZSk7CisgICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yTGlzdFNldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkg
PT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAg
UmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsK
KyAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxQYXJhbWV0
ZXJCdW5kbGU+Kj4oJnJlc3VsdCkpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJl
c3VsdCA9IFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldENvbHVtbk5h
bWVzKC4uLikKKyAgICAgKiAgICAgLnNldE5vdGVzKC4uLikKKyAgICAgKiAgICAgLnNldFRpbWVz
dGFtcCguLi4pCisgICAgICogICAgIC5zZXRWYWx1ZXMoLi4uKQorICAgICAqICAgICAuc2V0UGF5
bG9hZCguLi4pCisgICAgICogICAgIC5zZXRFcnJvciguLi4pCisgICAgICogICAgIC5zZXRFcnJv
ckxpc3QoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisK
Ky8qIENvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMg
dG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4gKi8KK2NsYXNz
IE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNT
ZXQgPSAwLAorICAgICAgICBJbnRlZ2VyU2V0ID0gMSA8PCAwLAorICAgICAgICBBcnJheVNldCA9
IDEgPDwgMSwKKyAgICAgICAgU3RyaW5nU2V0ID0gMSA8PCAyLAorICAgICAgICBWYWx1ZVNldCA9
IDEgPDwgMywKKyAgICAgICAgT2JqZWN0U2V0ID0gMSA8PCA0LAorICAgICAgICBBbGxGaWVsZHNT
ZXQgPSAoSW50ZWdlclNldCB8IEFycmF5U2V0IHwgU3RyaW5nU2V0IHwgVmFsdWVTZXQgfCBPYmpl
Y3RTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWls
ZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jl
c3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAg
ICBCdWlsZGVyKFJlZjwvKk9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMqL0luc3BlY3Rv
ck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0
KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgZnJpZW5kIGNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM7CisgICAg
cHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJbnRlZ2VyU2V0PiYgc2V0SW50ZWdl
cihjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgSW50ZWdlclNldCksIHByb3BlcnR5X2ludGVnZXJfYWxyZWFkeV9zZXQp
OworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImludGVnZXIi
KSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJbnRlZ2VyU2V0PigpOwor
ICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFycmF5U2V0PiYgc2V0QXJyYXko
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIEFycmF5U2V0KSwgcHJvcGVydHlfYXJyYXlfYWxyZWFkeV9zZXQpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImFycmF5IiksIHZhbHVl
KTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QXJyYXlTZXQ+KCk7CisgICAgICAgIH0K
KworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBTdHJpbmdTZXQpLCBwcm9wZXJ0eV9zdHJpbmdfYWxyZWFkeV9zZXQpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInN0cmluZyIpLCB2YWx1ZSk7Cisg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0cmluZ1NldD4oKTsKKyAgICAgICAgfQorCisg
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZVNldD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBW
YWx1ZVNldCksIHByb3BlcnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJ2YWx1ZSIpLCB2YWx1ZSk7CisgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE9iamVjdFNldD4mIHNldE9iamVjdChjb25zdCBTdHJpbmcmIHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT2JqZWN0U2V0
KSwgcHJvcGVydHlfb2JqZWN0X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJvYmplY3QiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxPYmplY3RTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8T2Jq
ZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT2JqZWN0V2l0aFBy
b3BlcnR5TmFtZUNvbmZsaWN0cykgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9j
YXN0KTsKKworICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1
bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVy
cHJldF9jYXN0PFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPio+KCZyZXN1bHQp
KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKKyAgICAgKiBSZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4gcmVzdWx0
ID0gT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czo6Y3JlYXRlKCkKKyAgICAgKiAgICAg
LnNldEludGVnZXIoLi4uKQorICAgICAqICAgICAuc2V0QXJyYXkoLi4uKQorICAgICAqICAgICAu
c2V0U3RyaW5nKC4uLikKKyAgICAgKiAgICAgLnNldFZhbHVlKC4uLikKKyAgICAgKiAgICAgLnNl
dE9iamVjdCguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGlj
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVp
bGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorfTsK
KworfSAvLyBEYXRhYmFzZQorCituYW1lc3BhY2UgVGVzdCB7CitjbGFzcyBQYXJhbWV0ZXJCdW5k
bGUgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAg
ICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBDb2x1bW5OYW1lc1Nl
dCA9IDEgPDwgMCwKKyAgICAgICAgTm90ZXNTZXQgPSAxIDw8IDEsCisgICAgICAgIFRpbWVzdGFt
cFNldCA9IDEgPDwgMiwKKyAgICAgICAgVmFsdWVzU2V0ID0gMSA8PCAzLAorICAgICAgICBQYXls
b2FkU2V0ID0gMSA8PCA0LAorICAgICAgICBFcnJvclNldCA9IDEgPDwgNSwKKyAgICAgICAgQWxs
RmllbGRzU2V0ID0gKENvbHVtbk5hbWVzU2V0IHwgTm90ZXNTZXQgfCBUaW1lc3RhbXBTZXQgfCBW
YWx1ZXNTZXQgfCBQYXlsb2FkU2V0IHwgRXJyb3JTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRl
PGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQg
U1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKlBhcmFtZXRlckJ1bmRs
ZSovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RG
TW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAg
ICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgUGFyYW1ldGVyQnVuZGxlOworICAgIHB1Ymxp
YzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5O
YW1lcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1l
c1NldCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7CisgICAgICAgIH0K
KworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhjb25zdCBTdHJp
bmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgdmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb3Rlc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGltZXN0
YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxyZWFk
eV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZh
bHVlcyIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4o
KTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0
UGF5bG9hZChSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJv
cGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFs
dWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3NldCk7CisgICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiZXJyb3IiKSwgdmFsdWUp
OworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4oKTsKKyAgICAgICAgfQor
CisgICAgICAgIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19u
b3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1
bmRsZSkgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAg
ICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51
bGwoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxQ
YXJhbWV0ZXJCdW5kbGU+Kj4oJnJlc3VsdCkpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8q
CisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxQYXJhbWV0ZXJCdW5k
bGU+IHJlc3VsdCA9IFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldENv
bHVtbk5hbWVzKC4uLikKKyAgICAgKiAgICAgLnNldE5vdGVzKC4uLikKKyAgICAgKiAgICAgLnNl
dFRpbWVzdGFtcCguLi4pCisgICAgICogICAgIC5zZXRWYWx1ZXMoLi4uKQorICAgICAqICAgICAu
c2V0UGF5bG9hZCguLi4pCisgICAgICogICAgIC5zZXRFcnJvciguLi4pCisgICAgICogICAgIC5y
ZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKworfSAvLyBUZXN0CisKKworCit9IC8vIG5h
bWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29s
IHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgorCisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRyaWJ1
dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVy
KTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFs
dWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yOworQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGU7CitAY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGU7
CitAY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxp
Y3RzOworQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3Q7CitAY2xhc3MgVGVz
dFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZTsKKworCisKKworX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxv
YWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVj
dDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBj
b2RlOihpbnQpY29kZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5
KSBOU1N0cmluZyAqbWVzc2FnZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBhc3NpZ24pIGludCBjb2RlOworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgi
ZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFt
ZXRlckJ1bmRsZSA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilq
c29uT2JqZWN0OworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXM7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm5vdGVzOworLyogb3B0aW9uYWwgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIHRpbWVzdGFtcDsKKy8qIG9wdGlvbmFs
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
dmFsdWVzOworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkOworLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqZXJyb3I7CisvKiBv
cHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3I+Ki8gKmVycm9yTGlzdDsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNl
UGFyYW1ldGVyQnVuZGxlIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb2x1bW5OYW1lczooTlNB
cnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMg
dGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZXJyb3I6
KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvciBlcnJvckxpc3Q6KE5TQXJyYXkvKjxU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0OworLyogcmVxdWlyZWQgKi8g
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1u
TmFtZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJp
bmcgKm5vdGVzOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikg
ZG91YmxlIHRpbWVzdGFtcDsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzOworLyogcmVxdWlyZWQgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2Fk
OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqZXJyb3I7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgY29weSkgTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKmVycm9y
TGlzdDsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitA
aW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZs
aWN0cyA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5
bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2Jq
ZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSW50ZWdlcjooTlNTdHJpbmcgKilpbnRlZ2Vy
IGFycmF5OihOU1N0cmluZyAqKWFycmF5IHN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgdmFsdWU6
KE5TU3RyaW5nICopdmFsdWUgb2JqZWN0OihOU1N0cmluZyAqKW9iamVjdDsKKy8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqaW50ZWdlcjsKKy8qIHJl
cXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqYXJyYXk7Cisv
KiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmlu
ZzsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAq
dmFsdWU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJp
bmcgKm9iamVjdDsKK0BlbmQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgOiBSV0lQcm90
b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlv
bmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
SlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKK0BlbmQKKwor
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4g
KilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbHVt
bk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJp
bmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5
bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yOworLyogcmVxdWly
ZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
Y29sdW1uTmFtZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkg
TlNTdHJpbmcgKm5vdGVzOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFz
c2lnbikgZG91YmxlIHRpbWVzdGFtcDsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzOworLyogcmVxdWlyZWQg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpw
YXlsb2FkOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqZXJyb3I7CitAZW5kCisKKworCisKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNP
Tk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFs
dWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZl
cnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBP
YmpDRW51bVR5cGU+CitPYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOworCisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0
YWJhc2VEb21haW4pCisKKysgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJz
ZUVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZU9wdGlvbmFsUGFy
YW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VQYXJh
bWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VPYmplY3RXaXRoUHJv
cGVydHlOYW1lQ29uZmxpY3RzOihUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2
b2lkKV9wYXJzZUR1bW15T2JqZWN0OihUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0ICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKKworKyAodm9pZClfcGFyc2VQ
YXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCisKKysgKHZvaWQpX3Bh
cnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxv
YWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworKyAo
dm9pZClfcGFyc2VFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
PiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3I+Ki8gY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3I+Ki8gKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZU9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Cisg
ICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVu
ZGxlIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKKysgKHZvaWQpX3BhcnNl
UGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZSAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1
ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGUgYWxsb2NdIGluaXRXaXRo
UGF5bG9hZDpwYXlsb2FkXTsKK30KKworKyAodm9pZClfcGFyc2VPYmplY3RXaXRoUHJvcGVydHlO
YW1lQ29uZmxpY3RzOihUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVD
b25mbGljdHMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsK
KyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5
TmFtZUNvbmZsaWN0cyBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCisrICh2
b2lkKV9wYXJzZUR1bW15T2JqZWN0OihUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0ICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZh
bHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0IGFsbG9jXSBpbml0V2l0aFBh
eWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCisKKysgKHZvaWQpX3BhcnNlUGFyYW1ldGVyQnVu
ZGxlOihUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXls
b2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9j
b2xUZXN0UGFyYW1ldGVyQnVuZGxlIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9
CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JW
YWx1ZXMuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7CisKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IK
KworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8
TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKKyAgICBzZWxm
Lm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKKyAgICBzZWxm
LmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOworCisgICAgcmV0dXJuIHNl
bGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpT
T05PYmplY3QgKilqc29uT2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0
aEluc3BlY3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUK
K3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJt
ZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9
IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0
cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAi
bWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1
cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2RlOihpbnQp
Y29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQor
CistIChpbnQpY29kZQoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUi
XTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VPcHRp
b25hbFBhcmFtZXRlckJ1bmRsZQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihu
b25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxm
LmNvbHVtbk5hbWVzID0gb2JqY0FycmF5RnJvbVBheWxvYWQ8TlNTdHJpbmc+KHBheWxvYWRbQCJj
b2x1bW5OYW1lcyJdKTsKKworICAgIHNlbGYubm90ZXMgPSBwYXlsb2FkW0Aibm90ZXMiXTsKKwor
ICAgIHNlbGYudGltZXN0YW1wID0gW3BheWxvYWRbQCJ0aW1lc3RhbXAiXSBkb3VibGVWYWx1ZV07
CisKKyAgICBzZWxmLnZhbHVlcyA9IHBheWxvYWRbQCJ2YWx1ZXMiXTsKKworICAgIHNlbGYucGF5
bG9hZCA9IHBheWxvYWRbQCJwYXlsb2FkIl07CisKKyAgICBzZWxmLmVycm9yID0gW1tUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAImVycm9y
Il1dOworCisgICAgc2VsZi5lcnJvckxpc3QgPSBvYmpjQXJyYXlGcm9tUGF5bG9hZDxUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yPihwYXlsb2FkW0AiZXJyb3JMaXN0Il0pOworCisgICAgcmV0dXJu
IHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilqc29uT2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
V2l0aEluc3BlY3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCld
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KXNldENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcworewor
ICAgIFtzdXBlciBzZXRJbnNwZWN0b3JBcnJheTppbnNwZWN0b3JTdHJpbmdBcnJheShjb2x1bW5O
YW1lcykgZm9yS2V5OkAiY29sdW1uTmFtZXMiXTsKK30KKworLSAoTlNBcnJheS8qPE5TU3RyaW5n
PiovICopY29sdW1uTmFtZXMKK3sKKyAgICByZXR1cm4gb2JqY1N0cmluZ0FycmF5KFtzdXBlciBp
bnNwZWN0b3JBcnJheUZvcktleTpAImNvbHVtbk5hbWVzIl0pOworfQorCistICh2b2lkKXNldE5v
dGVzOihOU1N0cmluZyAqKW5vdGVzCit7CisgICAgW3N1cGVyIHNldFN0cmluZzpub3RlcyBmb3JL
ZXk6QCJub3RlcyJdOworfQorCistIChOU1N0cmluZyAqKW5vdGVzCit7CisgICAgcmV0dXJuIFtz
dXBlciBzdHJpbmdGb3JLZXk6QCJub3RlcyJdOworfQorCistICh2b2lkKXNldFRpbWVzdGFtcDoo
ZG91YmxlKXRpbWVzdGFtcAoreworICAgIFtzdXBlciBzZXREb3VibGU6dGltZXN0YW1wIGZvcktl
eTpAInRpbWVzdGFtcCJdOworfQorCistIChkb3VibGUpdGltZXN0YW1wCit7CisgICAgcmV0dXJu
IFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0aW1lc3RhbXAiXTsKK30KKworLSAodm9pZClzZXRWYWx1
ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAgIFtzdXBlciBzZXRPYmpl
Y3Q6dmFsdWVzIGZvcktleTpAInZhbHVlcyJdOworfQorCistIChSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKil2YWx1ZXMKK3sKKyAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2Nd
IGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl0g
dG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXTsKK30KKworLSAodm9pZClzZXRQYXlsb2FkOihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCit7CisgICAgW3N1cGVyIHNldE9iamVjdDpwYXls
b2FkIGZvcktleTpAInBheWxvYWQiXTsKK30KKworLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
cGF5bG9hZAoreworICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5p
dFdpdGhJbnNwZWN0b3JPYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl0gdG9J
bnNwZWN0b3JPYmplY3RdLmdldCgpXTsKK30KKworLSAodm9pZClzZXRFcnJvcjooVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqKWVycm9yCit7CisgICAgW3N1cGVyIHNldE9iamVjdDplcnJvciBm
b3JLZXk6QCJlcnJvciJdOworfQorCistIChUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJy
b3IKK3sKKyAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0
V2l0aEluc3BlY3Rvck9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl0gdG9JbnNw
ZWN0b3JPYmplY3RdLmdldCgpXTsKK30KKworLSAodm9pZClzZXRFcnJvckxpc3Q6KE5TQXJyYXkv
KjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Cit7CisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9BUlJBWShlcnJvckxpc3QsIFtUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yIGNsYXNzXSk7CisgICAgW3N1cGVyIHNldEluc3BlY3RvckFycmF5Omluc3Bl
Y3Rvck9iamVjdEFycmF5KGVycm9yTGlzdCkgZm9yS2V5OkAiZXJyb3JMaXN0Il07Cit9CisKKy0g
KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Cit7Cisg
ICAgcmV0dXJuIG9iamNBcnJheTxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPihbc3VwZXIgaW5z
cGVjdG9yQXJyYXlGb3JLZXk6QCJlcnJvckxpc3QiXSk7Cit9CisKK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlCisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlk
PiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAImNvbHVtbk5hbWVzIl0sIEAiY29sdW1uTmFtZXMiKTsKKyAgICBzZWxmLmNvbHVt
bk5hbWVzID0gb2JqY0FycmF5RnJvbVBheWxvYWQ8TlNTdHJpbmc+KHBheWxvYWRbQCJjb2x1bW5O
YW1lcyJdKTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5
bG9hZFtAIm5vdGVzIl0sIEAibm90ZXMiKTsKKyAgICBzZWxmLm5vdGVzID0gcGF5bG9hZFtAIm5v
dGVzIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJ0aW1lc3RhbXAiXSwgQCJ0aW1lc3RhbXAiKTsKKyAgICBzZWxmLnRpbWVzdGFtcCA9IFtw
YXlsb2FkW0AidGltZXN0YW1wIl0gZG91YmxlVmFsdWVdOworCisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidmFsdWVzIl0sIEAidmFsdWVzIik7Cisg
ICAgc2VsZi52YWx1ZXMgPSBwYXlsb2FkW0AidmFsdWVzIl07CisKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJwYXlsb2FkIl0sIEAicGF5bG9hZCIp
OworICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWRbQCJwYXlsb2FkIl07CisKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJlcnJvciJdLCBAImVycm9y
Iik7CisgICAgc2VsZi5lcnJvciA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10g
aW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJlcnJvciJdXTsKKworICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImVycm9yTGlzdCJdLCBAImVycm9yTGlz
dCIpOworICAgIHNlbGYuZXJyb3JMaXN0ID0gb2JqY0FycmF5RnJvbVBheWxvYWQ8VGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvcj4ocGF5bG9hZFtAImVycm9yTGlzdCJdKTsKKworICAgIHJldHVybiBz
ZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopanNvbk9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdp
dGhJbnNwZWN0b3JPYmplY3Q6W2pzb25PYmplY3QgdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVt
bk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFt
cCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90
b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIGVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICopZXJyb3IgZXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4q
LyAqKWVycm9yTGlzdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkobm90ZXMsIEAibm90ZXMiKTsKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWQsIEAicGF5bG9hZCIpOworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoZXJyb3IsIEAiZXJyb3IiKTsKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGVycm9yTGlzdCwgQCJlcnJv
ckxpc3QiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFX0lOX0FSUkFZKGVycm9y
TGlzdCwgW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgY2xhc3NdKTsKKworICAgIHNlbGYuY29s
dW1uTmFtZXMgPSBjb2x1bW5OYW1lczsKKyAgICBzZWxmLm5vdGVzID0gbm90ZXM7CisgICAgc2Vs
Zi50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisgICAgc2VsZi52YWx1ZXMgPSB2YWx1ZXM7CisgICAg
c2VsZi5wYXlsb2FkID0gcGF5bG9hZDsKKyAgICBzZWxmLmVycm9yID0gZXJyb3I7CisgICAgc2Vs
Zi5lcnJvckxpc3QgPSBlcnJvckxpc3Q7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9p
ZClzZXRDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKK3sK
KyAgICBbc3VwZXIgc2V0SW5zcGVjdG9yQXJyYXk6aW5zcGVjdG9yU3RyaW5nQXJyYXkoY29sdW1u
TmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07Cit9CisKKy0gKE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKWNvbHVtbk5hbWVzCit7CisgICAgcmV0dXJuIG9iamNTdHJpbmdBcnJheShbc3VwZXIg
aW5zcGVjdG9yQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJdKTsKK30KKworLSAodm9pZClzZXRO
b3RlczooTlNTdHJpbmcgKilub3RlcworeworICAgIFtzdXBlciBzZXRTdHJpbmc6bm90ZXMgZm9y
S2V5OkAibm90ZXMiXTsKK30KKworLSAoTlNTdHJpbmcgKilub3RlcworeworICAgIHJldHVybiBb
c3VwZXIgc3RyaW5nRm9yS2V5OkAibm90ZXMiXTsKK30KKworLSAodm9pZClzZXRUaW1lc3RhbXA6
KGRvdWJsZSl0aW1lc3RhbXAKK3sKKyAgICBbc3VwZXIgc2V0RG91YmxlOnRpbWVzdGFtcCBmb3JL
ZXk6QCJ0aW1lc3RhbXAiXTsKK30KKworLSAoZG91YmxlKXRpbWVzdGFtcAoreworICAgIHJldHVy
biBbc3VwZXIgZG91YmxlRm9yS2V5OkAidGltZXN0YW1wIl07Cit9CisKKy0gKHZvaWQpc2V0VmFs
dWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKK3sKKyAgICBbc3VwZXIgc2V0T2Jq
ZWN0OnZhbHVlcyBmb3JLZXk6QCJ2YWx1ZXMiXTsKK30KKworLSAoUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopdmFsdWVzCit7CisgICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9j
XSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInZhbHVlcyJd
IHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0UGF5bG9hZDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAoreworICAgIFtzdXBlciBzZXRPYmplY3Q6cGF5
bG9hZCBmb3JLZXk6QCJwYXlsb2FkIl07Cit9CisKKy0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KXBheWxvYWQKK3sKKyAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGlu
aXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAicGF5bG9hZCJdIHRv
SW5zcGVjdG9yT2JqZWN0XS5nZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0RXJyb3I6KFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgoreworICAgIFtzdXBlciBzZXRPYmplY3Q6ZXJyb3Ig
Zm9yS2V5OkAiZXJyb3IiXTsKK30KKworLSAoVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVy
cm9yCit7CisgICAgcmV0dXJuIFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5p
dFdpdGhJbnNwZWN0b3JPYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJlcnJvciJdIHRvSW5z
cGVjdG9yT2JqZWN0XS5nZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0RXJyb3JMaXN0OihOU0FycmF5
Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAoreworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoZXJyb3JMaXN0LCBbVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciBjbGFzc10pOworICAgIFtzdXBlciBzZXRJbnNwZWN0b3JBcnJheTppbnNw
ZWN0b3JPYmplY3RBcnJheShlcnJvckxpc3QpIGZvcktleTpAImVycm9yTGlzdCJdOworfQorCist
IChOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAorewor
ICAgIHJldHVybiBvYmpjQXJyYXk8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4oW3N1cGVyIGlu
c3BlY3RvckFycmF5Rm9yS2V5OkAiZXJyb3JMaXN0Il0pOworfQorCitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGlj
dHMKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25h
cnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiaW50ZWdlciJdLCBAImludGVnZXIiKTsKKyAgICBz
ZWxmLmludGVnZXIgPSBwYXlsb2FkW0AiaW50ZWdlciJdOworCisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYXJyYXkiXSwgQCJhcnJheSIpOworICAg
IHNlbGYuYXJyYXkgPSBwYXlsb2FkW0AiYXJyYXkiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInN0cmluZyJdLCBAInN0cmluZyIpOworICAg
IHNlbGYuc3RyaW5nID0gcGF5bG9hZFtAInN0cmluZyJdOworCisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidmFsdWUiXSwgQCJ2YWx1ZSIpOworICAg
IHNlbGYudmFsdWUgPSBwYXlsb2FkW0AidmFsdWUiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm9iamVjdCJdLCBAIm9iamVjdCIpOworICAg
IHNlbGYub2JqZWN0ID0gcGF5bG9hZFtAIm9iamVjdCJdOworCisgICAgcmV0dXJuIHNlbGY7Cit9
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKilqc29uT2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEluc3Bl
Y3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldKSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhJbnRlZ2VyOihOU1N0cmluZyAqKWludGVnZXIgYXJyYXk6KE5TU3RyaW5nICopYXJy
YXkgc3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyB2YWx1ZTooTlNTdHJpbmcgKil2YWx1ZSBvYmpl
Y3Q6KE5TU3RyaW5nICopb2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKGludGVnZXIsIEAiaW50ZWdlciIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkoYXJyYXksIEAiYXJyYXkiKTsKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHN0cmluZywgQCJzdHJpbmciKTsKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHZhbHVlLCBAInZhbHVlIik7CisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShvYmplY3QsIEAib2JqZWN0Iik7CisKKyAg
ICBzZWxmLmludGVnZXIgPSBpbnRlZ2VyOworICAgIHNlbGYuYXJyYXkgPSBhcnJheTsKKyAgICBz
ZWxmLnN0cmluZyA9IHN0cmluZzsKKyAgICBzZWxmLnZhbHVlID0gdmFsdWU7CisgICAgc2VsZi5v
YmplY3QgPSBvYmplY3Q7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRJbnRl
Z2VyOihOU1N0cmluZyAqKWludGVnZXIKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOmludGVnZXIg
Zm9yS2V5OkAiaW50ZWdlciJdOworfQorCistIChOU1N0cmluZyAqKWludGVnZXIKK3sKKyAgICBy
ZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAImludGVnZXIiXTsKK30KKworLSAodm9pZClzZXRB
cnJheTooTlNTdHJpbmcgKilhcnJheQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6YXJyYXkgZm9y
S2V5OkAiYXJyYXkiXTsKK30KKworLSAoTlNTdHJpbmcgKilhcnJheQoreworICAgIHJldHVybiBb
c3VwZXIgc3RyaW5nRm9yS2V5OkAiYXJyYXkiXTsKK30KKworLSAodm9pZClzZXRTdHJpbmc6KE5T
U3RyaW5nICopc3RyaW5nCit7CisgICAgW3N1cGVyIHNldFN0cmluZzpzdHJpbmcgZm9yS2V5OkAi
c3RyaW5nIl07Cit9CisKKy0gKE5TU3RyaW5nICopc3RyaW5nCit7CisgICAgcmV0dXJuIFtzdXBl
ciBzdHJpbmdGb3JLZXk6QCJzdHJpbmciXTsKK30KKworLSAodm9pZClzZXRWYWx1ZTooTlNTdHJp
bmcgKil2YWx1ZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6dmFsdWUgZm9yS2V5OkAidmFsdWUi
XTsKK30KKworLSAoTlNTdHJpbmcgKil2YWx1ZQoreworICAgIHJldHVybiBbc3VwZXIgc3RyaW5n
Rm9yS2V5OkAidmFsdWUiXTsKK30KKworLSAodm9pZClzZXRPYmplY3Q6KE5TU3RyaW5nICopb2Jq
ZWN0Cit7CisgICAgW3N1cGVyIHNldFN0cmluZzpvYmplY3QgZm9yS2V5OkAib2JqZWN0Il07Cit9
CisKKy0gKE5TU3RyaW5nICopb2JqZWN0Cit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JL
ZXk6QCJvYmplY3QiXTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
RGF0YWJhc2VEdW1teU9iamVjdAorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihu
b25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1
cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKWpzb25PYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGlu
aXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltqc29uT2JqZWN0IHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQo
KV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQK
KworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZQorCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0
cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdLCBAImNvbHVtbk5hbWVzIik7CisgICAg
c2VsZi5jb2x1bW5OYW1lcyA9IG9iamNBcnJheUZyb21QYXlsb2FkPE5TU3RyaW5nPihwYXlsb2Fk
W0AiY29sdW1uTmFtZXMiXSk7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHBheWxvYWRbQCJub3RlcyJdLCBAIm5vdGVzIik7CisgICAgc2VsZi5ub3RlcyA9IHBh
eWxvYWRbQCJub3RlcyJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AidGltZXN0YW1wIl0sIEAidGltZXN0YW1wIik7CisgICAgc2VsZi50aW1l
c3RhbXAgPSBbcGF5bG9hZFtAInRpbWVzdGFtcCJdIGRvdWJsZVZhbHVlXTsKKworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInZhbHVlcyJdLCBAInZh
bHVlcyIpOworICAgIHNlbGYudmFsdWVzID0gcGF5bG9hZFtAInZhbHVlcyJdOworCisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AicGF5bG9hZCJdLCBA
InBheWxvYWQiKTsKKyAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkW0AicGF5bG9hZCJdOworCisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiZXJyb3Ii
XSwgQCJlcnJvciIpOworICAgIHNlbGYuZXJyb3IgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AiZXJyb3IiXV07CisKKyAgICByZXR1
cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKWpzb25PYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGlu
aXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltqc29uT2JqZWN0IHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQo
KV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilj
b2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1l
c3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKWVycm9yCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShub3RlcywgQCJub3RlcyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUFJPUEVSVFkodmFsdWVzLCBAInZhbHVlcyIpOworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShlcnJvciwgQCJlcnJvciIpOworCisg
ICAgc2VsZi5jb2x1bW5OYW1lcyA9IGNvbHVtbk5hbWVzOworICAgIHNlbGYubm90ZXMgPSBub3Rl
czsKKyAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKyAgICBzZWxmLnZhbHVlcyA9IHZh
bHVlczsKKyAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkOworICAgIHNlbGYuZXJyb3IgPSBlcnJv
cjsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcworeworICAgIFtzdXBlciBzZXRJbnNwZWN0
b3JBcnJheTppbnNwZWN0b3JTdHJpbmdBcnJheShjb2x1bW5OYW1lcykgZm9yS2V5OkAiY29sdW1u
TmFtZXMiXTsKK30KKworLSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKK3sK
KyAgICByZXR1cm4gb2JqY1N0cmluZ0FycmF5KFtzdXBlciBpbnNwZWN0b3JBcnJheUZvcktleTpA
ImNvbHVtbk5hbWVzIl0pOworfQorCistICh2b2lkKXNldE5vdGVzOihOU1N0cmluZyAqKW5vdGVz
Cit7CisgICAgW3N1cGVyIHNldFN0cmluZzpub3RlcyBmb3JLZXk6QCJub3RlcyJdOworfQorCist
IChOU1N0cmluZyAqKW5vdGVzCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJu
b3RlcyJdOworfQorCistICh2b2lkKXNldFRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcAorewor
ICAgIFtzdXBlciBzZXREb3VibGU6dGltZXN0YW1wIGZvcktleTpAInRpbWVzdGFtcCJdOworfQor
CistIChkb3VibGUpdGltZXN0YW1wCit7CisgICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6
QCJ0aW1lc3RhbXAiXTsKK30KKworLSAodm9pZClzZXRWYWx1ZXM6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKXZhbHVlcworeworICAgIFtzdXBlciBzZXRPYmplY3Q6dmFsdWVzIGZvcktleTpAInZh
bHVlcyJdOworfQorCistIChSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKK3sKKyAgICBy
ZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2Jq
ZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl0gdG9JbnNwZWN0b3JPYmplY3RdLmdl
dCgpXTsKK30KKworLSAodm9pZClzZXRQYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilw
YXlsb2FkCit7CisgICAgW3N1cGVyIHNldE9iamVjdDpwYXlsb2FkIGZvcktleTpAInBheWxvYWQi
XTsKK30KKworLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAoreworICAgIHJldHVy
biBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6
W1tzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl0gdG9JbnNwZWN0b3JPYmplY3RdLmdldCgp
XTsKK30KKworLSAodm9pZClzZXRFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVy
cm9yCit7CisgICAgW3N1cGVyIHNldE9iamVjdDplcnJvciBmb3JLZXk6QCJlcnJvciJdOworfQor
CistIChUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKK3sKKyAgICByZXR1cm4gW1tU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpb
W3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl0gdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXTsK
K30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjcwMzY4ZmRkYTVhM2FlZjIwMWM1NzY3NWE5NWVmMjYzYjhjMDZjMTcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0CkBAIC0w
LDAgKzEsMTU4MiBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5q
cworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRp
bWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisvLyBUZXN0LgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRlc3QuVW5jYXN0ZWRB
bmltYWxzIiwge1BpZ3M6ICJQaWdzIiwgQ293czogIkNvd3MiLCBDYXRzOiAiQ2F0cyIsIEhlbnM6
ICJIZW5zIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRlc3QuQ2FzdGVkQW5p
bWFscyIsIHtEdWNrczogIkR1Y2tzIiwgSGVuczogIkhlbnMiLCBDcm93czogIkNyb3dzIiwgRmxh
bWluZ29zOiAiRmxhbWluZ29zIn0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29t
bWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1
bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQg
c2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNo
ZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBC
YWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5n
LXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJp
bmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250
ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1
aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+
CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
KworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25h
bWVzcGFjZSBUZXN0IHsKK2NsYXNzIFR5cGVOZWVkaW5nQ2FzdDsKK2NsYXNzIFJlY3Vyc2l2ZU9i
amVjdDE7CitjbGFzcyBSZWN1cnNpdmVPYmplY3QyOworZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1h
bHM7CitlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHM7Cit9IC8vIFRlc3QKKy8vIEVuZCBvZiBmb3J3
YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBUZXN0IHsKK3R5
cGVkZWYgaW50IENhc3RlZE9iamVjdElkOwordHlwZWRlZiBpbnQgVW5jYXN0ZWRPYmplY3RJZDsK
K30gLy8gVGVzdAorLy8gRW5kIG9mIHR5cGVkZWZzLgorCituYW1lc3BhY2UgVGVzdEhlbHBlcnMg
eworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7Cisg
ICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVl
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK25hbWVzcGFjZSBUZXN0IHsK
Ky8qIEEgZHVtbXkgdHlwZSB0aGF0IHJlcXVpcmVzIHJ1bnRpbWUgY2FzdHMsIGFuZCBmb3JjZXMg
bm9uLXByaW1pdGl2ZSByZWZlcmVuY2VkIHR5cGVzIHRvIGFsc28gZW1pdCBydW50aW1lIGNhc3Qg
aGVscGVycy4gKi8KK2NsYXNzIFR5cGVOZWVkaW5nQ2FzdCA6IHB1YmxpYyBJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxk
c1NldCA9IDAsCisgICAgICAgIFN0cmluZ1NldCA9IDEgPDwgMCwKKyAgICAgICAgTnVtYmVyU2V0
ID0gMSA8PCAxLAorICAgICAgICBBbmltYWxzU2V0ID0gMSA8PCAyLAorICAgICAgICBJZFNldCA9
IDEgPDwgMywKKyAgICAgICAgVHJlZVNldCA9IDEgPDwgNCwKKyAgICAgICAgQWxsRmllbGRzU2V0
ID0gKFN0cmluZ1NldCB8IE51bWJlclNldCB8IEFuaW1hbHNTZXQgfCBJZFNldCB8IFRyZWVTZXQp
CisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsK
KyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsK
KworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWls
ZGVyKFJlZjwvKlR5cGVOZWVkaW5nQ2FzdCovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAg
ICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgVHlw
ZU5lZWRpbmdDYXN0OworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3Ry
aW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHJpbmdTZXQpLCBwcm9wZXJ0eV9zdHJp
bmdfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxp
dGVyYWwoInN0cmluZyIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0
cmluZ1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOdW1iZXJT
ZXQ+JiBzZXROdW1iZXIoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgTnVtYmVyU2V0KSwgcHJvcGVydHlfbnVtYmVyX2FscmVhZHlfc2V0
KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgibnVtYmVy
IiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TnVtYmVyU2V0PigpOwor
ICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFuaW1hbHNTZXQ+JiBzZXRBbmlt
YWxzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHMgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBBbmltYWxzU2V0KSwg
cHJvcGVydHlfYW5pbWFsc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiYW5pbWFscyIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8QW5pbWFsc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBJZFNldD4mIHNldElkKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIElkU2V0KSwgcHJvcGVydHlfaWRfYWxyZWFkeV9zZXQp
OworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJpZCIpLCB2
YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElkU2V0PigpOworICAgICAgICB9
CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRyZWVTZXQ+JiBzZXRUcmVlKFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRyZWVTZXQpLCBwcm9wZXJ0
eV90cmVlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJ0cmVlIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
VHJlZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxUeXBlTmVlZGluZ0Nhc3Q+IHJl
bGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
bGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKFR5cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCks
IGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEZNb3Zl
KCpyZWludGVycHJldF9jYXN0PFJlZjxUeXBlTmVlZGluZ0Nhc3Q+Kj4oJnJlc3VsdCkpOworICAg
ICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgor
ICAgICAqIFJlZjxUeXBlTmVlZGluZ0Nhc3Q+IHJlc3VsdCA9IFR5cGVOZWVkaW5nQ2FzdDo6Y3Jl
YXRlKCkKKyAgICAgKiAgICAgLnNldFN0cmluZyguLi4pCisgICAgICogICAgIC5zZXROdW1iZXIo
Li4uKQorICAgICAqICAgICAuc2V0QW5pbWFscyguLi4pCisgICAgICogICAgIC5zZXRJZCguLi4p
CisgICAgICogICAgIC5zZXRUcmVlKC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAg
Ki8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
KTsKKyAgICB9Cit9OworCisvKiAgKi8KK2VudW0gY2xhc3MgVW5jYXN0ZWRBbmltYWxzIHsKKyAg
ICBQaWdzID0gNCwKKyAgICBDb3dzID0gNSwKKyAgICBDYXRzID0gNiwKKyAgICBIZW5zID0gMSwK
K307IC8vIGVudW0gY2xhc3MgVW5jYXN0ZWRBbmltYWxzCisvKiAgKi8KK2VudW0gY2xhc3MgQ2Fz
dGVkQW5pbWFscyB7CisgICAgRHVja3MgPSAwLAorICAgIEhlbnMgPSAxLAorICAgIENyb3dzID0g
MiwKKyAgICBGbGFtaW5nb3MgPSAzLAorfTsgLy8gZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzCitj
bGFzcyBSZWN1cnNpdmVPYmplY3QxIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAg
ICAgICAgQWxsRmllbGRzU2V0ID0gMAorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAg
ICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypSZWN1cnNpdmVPYmplY3QxKi9JbnNwZWN0
b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVj
dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmll
bGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9Cisg
ICAgICAgIGZyaWVuZCBjbGFzcyBSZWN1cnNpdmVPYmplY3QxOworICAgIHB1YmxpYzoKKworICAg
ICAgICBSZWY8UmVjdXJzaXZlT2JqZWN0MT4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0
MSkgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAg
ICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwo
KTsKKyAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxSZWN1
cnNpdmVPYmplY3QxPio+KCZyZXN1bHQpKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgor
ICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8UmVjdXJzaXZlT2JqZWN0
MT4gcmVzdWx0ID0gUmVjdXJzaXZlT2JqZWN0MTo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnJlbGVh
c2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4gdmFsdWUpCisgICAgeworICAgICAg
ICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJvYmoiKSwgV1RG
TW92ZSh2YWx1ZSkpOworICAgIH0KK307CisKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDIgOiBwdWJs
aWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsK
KyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCisgICAg
fTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBw
cml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJl
ZjwvKlJlY3Vyc2l2ZU9iamVjdDIqL0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAg
ICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIFJlY3Vyc2l2
ZU9iamVjdDI7CisgICAgcHVibGljOgorCisgICAgICAgIFJlZjxSZWN1cnNpdmVPYmplY3QyPiBy
ZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZihSZWN1cnNpdmVPYmplY3QyKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0
KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIFdURk1v
dmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFJlY3Vyc2l2ZU9iamVjdDI+Kj4oJnJlc3VsdCkpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgorICAgICAqIFJlZjxSZWN1cnNpdmVPYmplY3QyPiByZXN1bHQgPSBSZWN1cnNpdmVPYmplY3Qy
OjpjcmVhdGUoKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKworICAg
IHZvaWQgc2V0T2JqKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVP
YmplY3QxPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9i
amVjdChBU0NJSUxpdGVyYWwoIm9iaiIpLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorfTsKKwor
fSAvLyBUZXN0CisKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4geworI2lmICFBU1NFUlRfRElTQUJMRUQKK3N0
YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWUqKTsKKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECit9OwordGVtcGxhdGU8PiBzdHJ1
Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nh
c3Q+IHsKK3N0YXRpYyBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRp
bmdDYXN0PiBydW50aW1lQ2FzdChSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4mJiB2
YWx1ZSk7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOworI2VuZGlmIC8vICFBU1NF
UlRfRElTQUJMRUQKK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHsKKyNpZiAhQVNTRVJUX0RJU0FC
TEVECitzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlKik7CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorfTsKK3RlbXBsYXRl
PD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJz
aXZlT2JqZWN0Mj4geworI2lmICFBU1NFUlRfRElTQUJMRUQKK3N0YXRpYyB2b2lkIGFzc2VydFZh
bHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsKKyNlbmRpZiAv
LyAhQVNTRVJUX0RJU0FCTEVECit9OworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgorc3RkOjpvcHRpb25hbDxQcm90b2NvbEVu
dW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8vIEVu
dW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCit0ZW1wbGF0ZTw+CitzdGQ6Om9wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29uc3Qg
U3RyaW5nJik7Cit0ZW1wbGF0ZTw+CitzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBu
YW1lc3BhY2UgVGVzdEhlbHBlcnMKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKK25hbWVzcGFjZSBUZXN0SGVscGVy
cyB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0g
eworICAgICJEdWNrcyIsCisgICAgIkhlbnMiLAorICAgICJDcm93cyIsCisgICAgIkZsYW1pbmdv
cyIsCisgICAgIlBpZ3MiLAorICAgICJDb3dzIiwKKyAgICAiQ2F0cyIsCit9OworCitTdHJpbmcg
Z2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFu
dF92YWx1ZXNbY29kZV07Cit9CisKKy8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCit0ZW1w
bGF0ZTw+CitzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVk
QW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlVuY2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpQaWdzLAorICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6
Q293cywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3Rl
ZEFuaW1hbHM6OkNhdHMsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6VW5jYXN0ZWRBbmltYWxzOjpIZW5zLAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCA0OyArK2kpCisgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50
X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKKwor
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK3RlbXBsYXRlPD4KK3N0ZDo6b3B0aW9uYWw8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+KGNvbnN0
IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25z
dGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OkNhc3RlZEFuaW1hbHM6OkR1Y2tzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkhlbnMsCisgICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6Q3Jvd3MsCisgICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6RmxhbWluZ29zLAor
ICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgIGlmIChw
cm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0p
CisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFu
aW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQor
CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCisjaWYgIUFTU0VSVF9ESVNBQkxF
RAordm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFu
aW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlKiB2YWx1ZSkKK3sKKyAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7CisgICAgU3RyaW5n
IHJlc3VsdDsKKyAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0
KTsKKyAgICBBU1NFUlQoY2FzdFN1Y2NlZWRlZCk7CisgICAgQVNTRVJUKHJlc3VsdCA9PSAiRHVj
a3MiIHx8IHJlc3VsdCA9PSAiSGVucyIgfHwgcmVzdWx0ID09ICJDcm93cyIgfHwgcmVzdWx0ID09
ICJGbGFtaW5nb3MiKTsKK30KKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECisKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCit7CisgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUp
OworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKKyAgICBib29sIGNhc3RTdWNj
ZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RT
dWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0
OjppdGVyYXRvciBzdHJpbmdQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJzdHJpbmci
KSk7CisgICAgICAgIEFTU0VSVChzdHJpbmdQb3MgIT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAg
IEJpbmRpbmdUcmFpdHM8U3RyaW5nPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoc3RyaW5n
UG9zLT52YWx1ZS5nZXQoKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0
OjppdGVyYXRvciBudW1iZXJQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJudW1iZXIi
KSk7CisgICAgICAgIEFTU0VSVChudW1iZXJQb3MgIT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAg
IEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUobnVtYmVyUG9z
LT52YWx1ZS5nZXQoKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0Ojpp
dGVyYXRvciBhbmltYWxzUG9zID0gb2JqZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgiYW5pbWFscyIp
KTsKKyAgICAgICAgQVNTRVJUKGFuaW1hbHNQb3MgIT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAg
IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46
OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFuaW1hbHNQb3MtPnZhbHVlLmdldCgpKTsKKyAg
ICB9CisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGlkUG9zID0gb2Jq
ZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgiaWQiKSk7CisgICAgICAgIEFTU0VSVChpZFBvcyAhPSBv
YmplY3QtPmVuZCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRWYWx1ZUhh
c0V4cGVjdGVkVHlwZShpZFBvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0KKyAgICB7CisgICAgICAg
IEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgdHJlZVBvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxp
dGVyYWwoInRyZWUiKSk7CisgICAgICAgIEFTU0VSVCh0cmVlUG9zICE9IG9iamVjdC0+ZW5kKCkp
OworICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZSh0cmVlUG9zLT52YWx1ZS5n
ZXQoKSk7CisgICAgfQorCisgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gNTsKKyAgICBp
ZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkpCisgICAgICAgIEZBVEFM
KCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwgb2JqZWN0LT50b0pTT05T
dHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Cit9CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAor
CitSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBCaW5k
aW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OnJ1
bnRpbWVDYXN0KFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4mJiB2YWx1ZSkKK3sKKyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQ7CisgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUt
PmFzT2JqZWN0KHJlc3VsdCk7CisgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0
U3VjY2VlZGVkKTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4
cGVjdGVkVHlwZShyZXN1bHQuZ2V0KCkpOworI2VuZGlmICAvLyAhQVNTRVJUX0RJU0FCTEVECisg
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVO
ZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJv
YmxlbSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6
OlR5cGVOZWVkaW5nQ2FzdCo+KHN0YXRpY19jYXN0PEluc3BlY3Rvck9iamVjdEJhc2UqPihyZXN1
bHQuZ2V0KCkpKTsKK30KKworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAordm9pZCBCaW5kaW5nVHJh
aXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSkKK3sK
KyAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gb2JqZWN0OworICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmpl
Y3QpOworICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CisK
KyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAwOworICAgIHsKKyAgICAgICAgSW5zcGVj
dG9yT2JqZWN0OjppdGVyYXRvciBvYmpQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJv
YmoiKSk7CisgICAgICAgIGlmIChvYmpQb3MgIT0gb2JqZWN0LT5lbmQoKSkgeworICAgICAgICAg
ICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmpl
Y3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52YWx1ZS5nZXQoKSk7Cisg
ICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50OworICAgICAgICB9CisgICAgfQorICAg
IGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKKyAgICAgICAgRkFU
QUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNP
TlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKK30KKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVE
CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKQoreworICAgIEFTU0VSVF9BUkco
dmFsdWUsIHZhbHVlKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CisgICAg
Ym9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7CisgICAgQVNTRVJU
X1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKworICAgIGludCBmb3VuZFBy
b3BlcnRpZXNDb3VudCA9IDA7CisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJh
dG9yIG9ialBvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwoIm9iaiIpKTsKKyAgICAgICAg
aWYgKG9ialBvcyAhPSBvYmplY3QtPmVuZCgpKSB7CisgICAgICAgICAgICBCaW5kaW5nVHJhaXRz
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1
ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgICsrZm91
bmRQcm9wZXJ0aWVzQ291bnQ7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGZvdW5kUHJvcGVy
dGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKQorICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBw
cm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWko
KS5kYXRhKCkpOworfQorI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKKworfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisK
KworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNv
bmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVl
cy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVm
YXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0
CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJs
ZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9s
bGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0g
Y29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7Cisg
ICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1y
ZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0
Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3Q7
CitAY2xhc3MgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDE7CitAY2xhc3MgVGVzdFBy
b3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDI7CisKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdl
ciwgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscykgeworICAgIFRlc3RQcm90b2NvbFRl
c3RVbmNhc3RlZEFuaW1hbHNQaWdzLAorICAgIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1h
bHNDb3dzLAorICAgIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNDYXRzLAorICAgIFRl
c3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNIZW5zLAorfTsKKwordHlwZWRlZiBOU19FTlVN
KE5TSW50ZWdlciwgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpIHsKKyAgICBUZXN0UHJv
dG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0R1Y2tzLAorICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRB
bmltYWxzSGVucywKKyAgICBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0Nyb3dzLAorICAg
IFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRmxhbWluZ29zLAorfTsKKworCitfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29s
VGVzdFR5cGVOZWVkaW5nQ2FzdCA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxv
YWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoU3RyaW5nOihOU1N0
cmluZyAqKXN0cmluZyBudW1iZXI6KGludCludW1iZXIgYW5pbWFsczooVGVzdFByb3RvY29sVGVz
dENhc3RlZEFuaW1hbHMpYW5pbWFscyBpZGVudGlmaWVyOihpbnQpaWRlbnRpZmllciB0cmVlOihU
ZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWU7CisvKiByZXF1aXJlZCAqLyBA
cHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKKy8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBudW1iZXI7CisvKiByZXF1aXJl
ZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVk
QW5pbWFscyBhbmltYWxzOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFz
c2lnbikgaW50IGlkZW50aWZpZXI7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgcmV0YWluKSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqdHJlZTsKK0BlbmQK
KworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIDogUldJUHJvdG9jb2xKU09OT2JqZWN0Cist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwg
aWQ+ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkg
KG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqb2Jq
OworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRl
cmZhY2UgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgOiBSV0lQcm90b2NvbEpTT05P
YmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0
cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVj
dDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy8qIG9wdGlvbmFsICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmpl
Y3QxICpvYmo7CitAZW5kCisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKKworCisKKyMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPYmpDRW51
bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKK2lubGlu
ZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxz
IHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sVGVz
dFVuY2FzdGVkQW5pbWFsc1BpZ3M6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIlBpZ3Mi
KTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNDb3dzOgorICAgICAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsKCJDb3dzIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0
VW5jYXN0ZWRBbmltYWxzQ2F0czoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiQ2F0cyIp
OworICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnM6CisgICAgICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoIkhlbnMiKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lu
bGluZSBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzIGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSA9PSAiUGlncyIpCisgICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzUGlnczsKKyAgICBpZiAodmFs
dWUgPT0gIkNvd3MiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5p
bWFsc0Nvd3M7CisgICAgaWYgKHZhbHVlID09ICJDYXRzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNDYXRzOworICAgIGlmICh2YWx1ZSA9PSAiSGVucyIp
CisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzSGVuczsKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFVuY2Fz
dGVkQW5pbWFsc1BpZ3M7Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0
UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscyB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsK
KyAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3M6CisgICAgICAgIHJl
dHVybiBBU0NJSUxpdGVyYWwoIkR1Y2tzIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0Q2Fz
dGVkQW5pbWFsc0hlbnM6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkhlbnMiKTsKKyAg
ICBjYXNlIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzQ3Jvd3M6CisgICAgICAgIHJldHVy
biBBU0NJSUxpdGVyYWwoIkNyb3dzIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVk
QW5pbWFsc0ZsYW1pbmdvczoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiRmxhbWluZ29z
Iik7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgVGVzdFByb3RvY29sVGVzdENhc3Rl
ZEFuaW1hbHMgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAg
aWYgKHZhbHVlID09ICJEdWNrcyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2Fz
dGVkQW5pbWFsc0R1Y2tzOworICAgIGlmICh2YWx1ZSA9PSAiSGVucyIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0hlbnM7CisgICAgaWYgKHZhbHVlID09ICJD
cm93cyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0Nyb3dz
OworICAgIGlmICh2YWx1ZSA9PSAiRmxhbWluZ29zIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbFRlc3RDYXN0ZWRBbmltYWxzRmxhbWluZ29zOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0R1Y2tzOworfQorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmct
cnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCisKKysgKHZvaWQpX3Bh
cnNlVHlwZU5lZWRpbmdDYXN0OihUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0ICoqKW91
dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VDYXN0ZWRPYmpl
Y3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2
b2lkKV9wYXJzZVVuY2FzdGVkT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VVbmNhc3RlZEFuaW1hbHM6KE5TTnVtYmVy
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VDYXN0
ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
KysgKHZvaWQpX3BhcnNlUmVjdXJzaXZlT2JqZWN0MTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2
ZU9iamVjdDEgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9w
YXJzZVJlY3Vyc2l2ZU9iamVjdDI6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRh
dGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCisKKysgKHZvaWQp
X3BhcnNlVHlwZU5lZWRpbmdDYXN0OihUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0ICoq
KW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZh
bHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0IGFsbG9jXSBpbml0V2l0aFBh
eWxvYWQ6cGF5bG9hZF07Cit9CisKKysgKHZvaWQpX3BhcnNlQ2FzdGVkT2JqZWN0SWQ6KE5TTnVt
YmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKKyAgICAqb3V0
VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJzZVVuY2FzdGVk
T2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xh
c3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOworfQorCisrICh2b2lk
KV9wYXJzZVVuY2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU1N0cmluZyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IEAoSW5zcGVjdG9yOjpmcm9tUHJv
dG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscz4ocGF5bG9hZCkpOwor
fQorCisrICh2b2lkKV9wYXJzZUNhc3RlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQ
RShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBAKEluc3BlY3Rv
cjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzPihwYXls
b2FkKSk7Cit9CisKKysgKHZvaWQpX3BhcnNlUmVjdXJzaXZlT2JqZWN0MTooVGVzdFByb3RvY29s
VGVzdFJlY3Vyc2l2ZU9iamVjdDEgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
K3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25h
cnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVP
YmplY3QxIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKKysgKHZvaWQpX3Bh
cnNlUmVjdXJzaXZlT2JqZWN0MjooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFs
dWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIGFsbG9jXSBpbml0V2l0aFBh
eWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50
aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90
b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9h
ZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Aic3RyaW5nIl0s
IEAic3RyaW5nIik7CisgICAgc2VsZi5zdHJpbmcgPSBwYXlsb2FkW0Aic3RyaW5nIl07CisKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJudW1iZXIi
XSwgQCJudW1iZXIiKTsKKyAgICBzZWxmLm51bWJlciA9IFtwYXlsb2FkW0AibnVtYmVyIl0gaW50
ZWdlclZhbHVlXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAImFuaW1hbHMiXSwgQCJhbmltYWxzIik7CisgICAgc2VsZi5hbmltYWxzID0gZnJv
bVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzPihwYXlsb2FkW0Ai
YW5pbWFscyJdKTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
cGF5bG9hZFtAImlkZW50aWZpZXIiXSwgQCJpZGVudGlmaWVyIik7CisgICAgc2VsZi5pZGVudGlm
aWVyID0gW3BheWxvYWRbQCJpZCJdIGludGVnZXJWYWx1ZV07CisKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0cmVlIl0sIEAidHJlZSIpOworICAg
IHNlbGYudHJlZSA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgYWxsb2NdIGlu
aXRXaXRoUGF5bG9hZDpwYXlsb2FkW0AidHJlZSJdXTsKKworICAgIHJldHVybiBzZWxmOworfQor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICopanNvbk9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnNwZWN0
b3JPYmplY3Q6W2pzb25PYmplY3QgdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXSkpCisgICAgICAg
IHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBudW1iZXI6KGludCludW1iZXIgYW5pbWFs
czooVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscyBpZGVudGlmaWVyOihpbnQp
aWRlbnRpZmllciB0cmVlOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWUK
K3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoc3RyaW5nLCBAInN0
cmluZyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkodHJlZSwg
QCJ0cmVlIik7CisKKyAgICBzZWxmLnN0cmluZyA9IHN0cmluZzsKKyAgICBzZWxmLm51bWJlciA9
IG51bWJlcjsKKyAgICBzZWxmLmFuaW1hbHMgPSBhbmltYWxzOworICAgIHNlbGYuaWRlbnRpZmll
ciA9IGlkZW50aWZpZXI7CisgICAgc2VsZi50cmVlID0gdHJlZTsKKworICAgIHJldHVybiBzZWxm
OworfQorCistICh2b2lkKXNldFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICBbc3Vw
ZXIgc2V0U3RyaW5nOnN0cmluZyBmb3JLZXk6QCJzdHJpbmciXTsKK30KKworLSAoTlNTdHJpbmcg
KilzdHJpbmcKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAInN0cmluZyJdOwor
fQorCistICh2b2lkKXNldE51bWJlcjooaW50KW51bWJlcgoreworICAgIFtzdXBlciBzZXRJbnRl
Z2VyOm51bWJlciBmb3JLZXk6QCJudW1iZXIiXTsKK30KKworLSAoaW50KW51bWJlcgoreworICAg
IHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAIm51bWJlciJdOworfQorCistICh2b2lkKXNl
dEFuaW1hbHM6KFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMKK3sKKyAgICBb
c3VwZXIgc2V0U3RyaW5nOnRvUHJvdG9jb2xTdHJpbmcoYW5pbWFscykgZm9yS2V5OkAiYW5pbWFs
cyJdOworfQorCistIChUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzCit7Cisg
ICAgcmV0dXJuIGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFs
cz4oW3N1cGVyIHN0cmluZ0ZvcktleTpAImFuaW1hbHMiXSk7Cit9CisKKy0gKHZvaWQpc2V0SWRl
bnRpZmllcjooaW50KWlkZW50aWZpZXIKK3sKKyAgICBbc3VwZXIgc2V0SW50ZWdlcjppZGVudGlm
aWVyIGZvcktleTpAImlkIl07Cit9CisKKy0gKGludClpZGVudGlmaWVyCit7CisgICAgcmV0dXJu
IFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiaWQiXTsKK30KKworLSAodm9pZClzZXRUcmVlOihUZXN0
UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKXRyZWUKK3sKKyAgICBbc3VwZXIgc2V0T2Jq
ZWN0OnRyZWUgZm9yS2V5OkAidHJlZSJdOworfQorCistIChUZXN0UHJvdG9jb2xUZXN0UmVjdXJz
aXZlT2JqZWN0MSAqKXRyZWUKK3sKKyAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJz
aXZlT2JqZWN0MSBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W1tzdXBlciBvYmplY3RG
b3JLZXk6QCJ0cmVlIl0gdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXTsKK30KKworQGVuZAorCitA
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEKKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5vYmogPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1
cnNpdmVPYmplY3QyIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAIm9iaiJdXTsKKwor
ICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W2pzb25PYmplY3QgdG9JbnNwZWN0b3JPYmpl
Y3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZClzZXRPYmo6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyICopb2Jq
Cit7CisgICAgW3N1cGVyIHNldE9iamVjdDpvYmogZm9yS2V5OkAib2JqIl07Cit9CisKKy0gKFRl
c3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyICopb2JqCit7CisgICAgcmV0dXJuIFtbVGVz
dFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2Jq
ZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAib2JqIl0gdG9JbnNwZWN0b3JPYmplY3RdLmdldCgp
XTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2
ZU9iamVjdDIKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgc2VsZi5vYmogPSBbW1Rl
c3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5
bG9hZFtAIm9iaiJdXTsKKworICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdAorewor
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W2pzb25PYmpl
Y3QgdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRPYmo6KFRlc3RQcm90b2NvbFRlc3RSZWN1
cnNpdmVPYmplY3QxICopb2JqCit7CisgICAgW3N1cGVyIHNldE9iamVjdDpvYmogZm9yS2V5OkAi
b2JqIl07Cit9CisKKy0gKFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICopb2JqCit7
CisgICAgcmV0dXJuIFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgYWxsb2NdIGlu
aXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAib2JqIl0gdG9JbnNw
ZWN0b3JPYmplY3RdLmdldCgpXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxh
dGZvcm0uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2ZhaWwtb24tY29tbWFuZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hMTgwY2FlOWJmZjhkYTI0ZjA2Y2YyMTA1ZWQ1OTg0NTRjZjVlY2ZiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uCkBAIC0w
LDAgKzEsMTYgQEAKK3sKKyAgICAiZG9tYWluIjogIk92ZXJsYXkiLAorICAgICJjb21tYW5kcyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAicHJvY2Vzc1BvaW50cyIsCisgICAg
ICAgICAgICAicGxhdGZvcm0iOiAiaW52YWxpZCIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6
IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50MSIsICJ0eXBlIjogIm51bWJlciIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50MiIsICJ0eXBlIjogIm51bWJlciIg
fQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAgICBd
CisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWRvbWFpbi1hdmFpbGFiaWxp
dHkuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tZG9tYWluLWF2YWlsYWJpbGl0eS5qc29uCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2ZWUy
YzYwMDE4MGJlMGFlMTM1OTQwYjQ0N2UxODg3MWQyN2FlYjcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWls
LW9uLWRvbWFpbi1hdmFpbGFiaWxpdHkuanNvbgpAQCAtMCwwICsxLDkgQEAKK3sKKyAgICAiZG9t
YWluIjogIldlYk9ubHkiLAorICAgICJhdmFpbGFiaWxpdHkiOiAid2ViYiIsCisgICAgImNvbW1h
bmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJlbmFibGUiCisgICAgICAg
IH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFy
YW1ldGVyLW5hbWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVy
LW5hbWVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmFiNzZjYTYyNzljZTNhNGFjZjc5ODU1MDBiMzBiN2Qx
Y2ZiOGYwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1w
YXJhbWV0ZXItbmFtZXMuanNvbgpAQCAtMCwwICsxLDE2IEBACit7CisgICAgImRvbWFpbiI6ICJP
dmVybGF5IiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1l
IjogInByb2Nlc3NQb2ludHMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJwb2ludCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInBvaW50IiwgInR5cGUiOiAibnVtYmVyIiB9CisgICAgICAgICAg
ICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJyZXN1bHQxIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicmVzdWx0MiIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAgXQorICAgICAgICB9
CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFy
YW1ldGVyLW5hbWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0
ZXItbmFtZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOGJiMTVjMDRiNjU5YjljYjlhZmRlMzRjZDU3MjJi
YTljNmQ0ZGE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1
cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24KQEAgLTAsMCArMSwxNiBAQAoreworICAgICJkb21haW4i
OiAiT3ZlcmxheSIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAi
bmFtZSI6ICJwcm9jZXNzUG9pbnRzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQxIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQyIiwgInR5cGUiOiAibnVtYmVyIiB9CisgICAg
ICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0KKyAgICAg
ICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRl
ci1uYW1lcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDNkM2IzY2M2NDIzY2VjMjVhNjdkYTkxMzJhNzY2ODY3NTVhNDQ0MAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29u
CkBAIC0wLDAgKzEsMTIgQEAKK3sKKyAgICAiZG9tYWluIjogIk92ZXJsYXkiLAorICAgICJldmVu
dHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInByb2Nlc3NlZFBvaW50cyIs
CisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InBvaW50IiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAg
IF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9m
YWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwMmZj
NmEzMjcwYTY0NmE0NTA0NDdmZGMwNDAxMzk5NWE5NDJiZjAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWls
LW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uCkBAIC0wLDAgKzEsMTUgQEAKK3sK
KyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0
cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlm
aWVyLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9i
amVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0K
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWls
LW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFlYmFjZWU4
YjIzZTFlYTM0MDVkOGFjMGEwMDE2MjA3MDEwYzk0ODUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9u
LWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1lcy5qc29uCkBAIC0wLDAgKzEsMTUgQEAKK1sKK3sK
KyAgICAiZG9tYWluIjogIk92ZXJsYXlUeXBlcyIsCisgICAgInR5cGVzIjogWworICAgICAgICB7
CisgICAgICAgICAgICAiaWQiOiAiUG9pbnQiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0
IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAieCIsICJ0eXBlIjogImludGVnZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ4
IiwgInR5cGUiOiAiaW50ZWdlciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQor
fQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWVu
dW0td2l0aC1uby12YWx1ZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzJhN2MzMjQ5YTQwYmQ0NDdlMTlh
OTJhOGU1NjkzMGQzZjg1OTU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1lbnVtLXdpdGgtbm8t
dmFsdWVzLmpzb24KQEAgLTAsMCArMSwxMCBAQAoreworICAgICJkb21haW4iOiAiRGF0YWJhc2Ui
LAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlByaW1hcnlD
b2xvcnMiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVt
IjogW10KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tbnVtYmVyLXR5cGVk
LW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25h
bC1wYXJhbWV0ZXItZmxhZy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjczMDhkYjk5MmQ2NTI1N2YyYjVjNjMy
N2UwY2EzNTQ1MDJkNjE1NGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLW51bWJlci10eXBlZC1v
cHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCkBAIC0wLDAgKzEsMTggQEAKK3sKKyAgICAiZG9t
YWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2Jq
ZWN0LiIKKyAgICAgICAgfQorICAgIF0sCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAg
ICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAg
ICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5h
bWVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogMCB9CisgICAgICAgICAgICBdCisg
ICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25h
bC10eXBlLW1lbWJlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1i
ZXIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hZmVhNTU1ZWM0ZmUwODY2Mjc4ZTFmY2Q3MzM1NDI0MmRlZmQx
YmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1t
ZW1iZXIuanNvbgpAQCAtMCwwICsxLDE2IEBACitbCit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFz
ZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3Ii
LAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2Ny
aXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
Y29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iLCAi
b3B0aW9uYWwiOiAwIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9m
YWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQwMTJjNzliNmIzOGMyMWRmZjYwN2ZlYzllZTkwYjI4MDMxMGY5MDgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCkBA
IC0wLDAgKzEsMTggQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAg
ICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVl
IGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfQorICAgIF0sCisgICAg
ImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9w
dGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlv
bmFsIjogInRydWUiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9u
LXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNhM2Vm
MjhhOGY4ODE0Y2M2MTdmYjVkNWJjMjEzMDZkMGFhZDRmZDAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWls
LW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uCkBAIC0wLDAgKzEsMTYg
QEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJv
YmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisg
ICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1l
c3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4i
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIs
ICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIsICJvcHRpb25hbCI6ICJmYWxzZSIgfQorICAg
ICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBl
LWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtZGVjbGFy
YXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOWI3NTkwY2NjNmY2
YmMzNDQzYTRhMjgzY2E2ZmNjZmRmMzI3NzM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBl
LWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24KQEAgLTAsMCArMSwxMyBAQAor
WworeworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7
CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUi
OiAib2JqZWN0IiwKKyAgICAgICAgICAgICIkcmVmIjogIlNvbWVUeXBlIiwKKyAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9Cisg
ICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUt
dHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjhjODNiYmZjZTQxMmI4YjA5ZGY3NDdhODc1ZTgwMzZkZmVjY2JjMzYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24K
QEAgLTAsMCArMSwxOCBAQAoreworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBl
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAorICAgICAg
ICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlx
dWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9CisgICAgXSwKKyAg
ICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRl
T3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJEYXRhYmFzZUlkIiB9
CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5
cGUtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1pbnZhbGlkLXBs
YXRmb3JtLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTlmZDJlOTk1NjFkZTBjZTNjNzY2ZWU2ODgyMWNhMjNj
NjRkNWM5MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS13aXRoLWludmFsaWQtcGxhdGZv
cm0uanNvbgpAQCAtMCwwICsxLDExIEBACit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAg
ICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJ
ZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgInBsYXRmb3Jt
IjogImludmFsaWQiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3Qg
aWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUt
d2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUu
anNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41MzE5MDFlNGE5YWQ5OTM2YjAxYmJhZWQ5N2ExZDRkYTM0ODQ3OGIw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbgpA
QCAtMCwwICsxLDEwIEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVz
IjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiZGF0YWJhc2VJZCIsCisgICAgICAg
ICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlx
dWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9CisgICAgXQorfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRp
b24uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9u
Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDY4ODdhMjc0MTE5MDBhODBkNTBmMDAzZWFjMzZjMTNhOTlmYWU1
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBl
LWRlY2xhcmF0aW9uLmpzb24KQEAgLTAsMCArMSwxMiBAQAorWworeworICAgICJkb21haW4iOiAi
UnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
UmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiZHJhZ29uIiwKKyAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9
CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWlu
LXR5cGUtbWVtYmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1t
ZW1iZXIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iODE3ZGI1MDQ0ZGMxZjI4NTU3MDA4YzFmMTc2MWYxYjA2
OGY0Y2U2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWlu
LXR5cGUtbWVtYmVyLmpzb24KQEAgLTAsMCArMSwxNSBAQAorWworeworICAgICJkb21haW4iOiAi
RmFudGFzeSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
RHJhZ29uRWdnIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiQSBkcmFnb24gZWdnLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6
IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbG9yIiwgIiRyZWYiOiAiQ29sb3IiIH0K
KyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2dlbmVyYXRl
LWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZl
YXR1cmUtZ3VhcmRzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjdjZjhlNTgyZjY1YWU2ZmM2MTU2OTI4ODJj
YjBmNjU3NDYwMTA4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uCkBAIC0wLDAgKzEsMzYgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIk5l
dHdvcmsxIiwKKyAgICAiZmVhdHVyZUd1YXJkIjogIlBMQVRGT1JNKFdFQl9DT01NQU5EUykiLAor
ICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJl
c291cmNlIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGlu
IHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jv
c3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4i
OiAiTmV0d29yazIiLAorICAgICJmZWF0dXJlR3VhcmQiOiAiUExBVEZPUk0oV0VCX1RZUEVTKSIs
CisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTmV0d29ya0Vy
cm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVy
dGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJz
dHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJF
cnJvciBjb2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAg
ICAiZG9tYWluIjogIk5ldHdvcmszIiwKKyAgICAiZmVhdHVyZUd1YXJkIjogIlBMQVRGT1JNKFdF
Ql9FVkVOVFMpIiwKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFt
ZSI6ICJyZXNvdXJjZUxvYWRlZCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSByZXNv
dXJjZSB3YXMgbG9hZGVkLiIKKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3NhbWUt
dHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFp
bi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjNiZjRkZmY1Y2NjMjlkMGU4YzFmYTRiMmRkMzI4M2U3NzE2MzJj
N2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCkBA
IC0wLDAgKzEsMjIgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBl
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
VW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAg
ImRvbWFpbiI6ICJSdW50aW1lMiIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5n
IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIu
IgorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2hhZG93ZWQtb3B0aW9uYWwtdHlw
ZS1zZXR0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yMGEwYzE1NTI3NTBmNjI4Mjg4Y2ZmNDE5Mzk2YmQ2ZjZhZjc0OWZlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KQEAgLTAsMCArMSwzMSBA
QAoreworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7
CisgICAgICAgICAgICAiaWQiOiAiS2V5UGF0aCIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmpl
Y3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIktleSBwYXRoLiIsCisgICAgICAgICAg
ICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICJuYW1lIjogInR5cGUiLAorICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAor
ICAgICAgICAgICAgICAgICAgICAiZW51bSI6IFsibnVsbCIsICJzdHJpbmciLCAiYXJyYXkiXSwK
KyAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIktleSBwYXRoIHR5cGUuIgorICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAi
bmFtZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAor
ICAgICAgICAgICAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgICAgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiU3RyaW5nIHZhbHVlLiIKKyAgICAgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiYXJyYXkiLAorICAg
ICAgICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAgICAgICAgICJv
cHRpb25hbCI6IHRydWUsCisgICAgICAgICAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAi
c3RyaW5nIiB9LAorICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQXJyYXkgdmFs
dWUuIgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0K
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
dHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Y2JjOWQ1Mzk0NzhkYjQ5NWM5NjA2N2VjZDU0YTk1YmU1MmY4ZDA3MAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCkBAIC0wLDAgKzEs
MTAgQEAKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAg
ICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0
eXBlIjogImludGVnZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmpl
Y3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xh
cmF0aW9uLWFycmF5LXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmNmYjA4YmQ5NDBiNjRmYjY2MDM5NjVjZTFiMDRkM2ZjOTc0OWVhOTAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgpAQCAtMCwwICsxLDUw
IEBACitbCit7CisgICAgImRvbWFpbiI6ICJEZWJ1Z2dlciIsCisgICAgInR5cGVzIjogWworICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQnJlYWtwb2ludElkIiwKKyAgICAgICAgICAgICJ0
eXBlIjogImludGVnZXIiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJSZWFzb24iLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJl
bnVtIjogWyJEaWVkIiwgIkZhaW50ZWQiLCAiSHVuZ3J5Il0KKyAgICAgICAgfQorICAgIF0KK30s
Cit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRl
Z2VyIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTHVja3lOdW1i
ZXJzIiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6
IHsgInR5cGUiOiAiaW50ZWdlciIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiQmFieU5hbWVzIiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAg
ICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJOZXdPYmplY3RzIiwKKyAgICAgICAgICAgICJ0eXBlIjog
ImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiT2JqZWN0SWQiIH0KKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk9sZE9iamVjdHMiLAorICAg
ICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6
ICJEZWJ1Z2dlci5CcmVha3BvaW50SWQiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIlN0b3BSZWFzb25zIiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwK
KyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiRGVidWdnZXIuUmVhc29uIiB9CisgICAg
ICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZjBhZWU5Yzkx
Yjk1YWJhZjM4N2U3MmE5MWEzMzM4YjU3OWRhOWFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNs
YXJhdGlvbi1lbnVtLXR5cGUuanNvbgpAQCAtMCwwICsxLDE1IEBACit7CisgICAgImRvbWFpbiI6
ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJGYXJtQW5pbWFscyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAg
ICAgImVudW0iOiBbIlBpZ3MiLCAiQ293cyIsICJDYXRzIiwgIkhlbnMiXQorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVHdvTGVnZ2VkQW5pbWFscyIsCisgICAgICAg
ICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbIkR1Y2tzIiwgIkhl
bnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29zIl0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0
LXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNzgzMDkxOTczYmNmMzc1NDVjZDc1OTYwOTE4NjdmOGNh
MjVkODVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29u
CkBAIC0wLDAgKzEsODMgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAi
ZGVzY3JpcHRpb24iOiAiVGVzdCB0eXBlIGJ1aWxkZXIgZ2VuZXJhdGlvbiBvZiB2YXJpb3VzIG9i
amVjdCB0eXBlcy4iLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlk
IjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVz
IjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmlu
ZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9y
IGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJpZCI6ICJFcnJvckxpc3QiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAg
ICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJFcnJvciIgfQorICAgICAgICB9LAorICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUiLAorICAgICAg
ICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJv
cHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjog
Im51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvciIsICIkcmVmIjogIkVycm9y
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3JM
aXN0IiwgIiRyZWYiOiAiRXJyb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAg
ICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQYXJhbWV0ZXJC
dW5kbGUiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9w
ZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlw
ZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJlcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiZXJyb3JMaXN0IiwgIiRyZWYiOiAiRXJyb3JMaXN0IiB9CisgICAgICAg
ICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJPYmplY3RX
aXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJD
b25mbGljdGVkIG5hbWVzIG1heSBjYXVzZSBnZW5lcmF0ZWQgZ2V0dGVycy9zZXR0ZXJzIHRvIGNs
YXNoIHdpdGggYnVpbHQtaW4gSW5zcGVjdG9yT2JqZWN0IG1ldGhvZHMuIiwKKyAgICAgICAgICAg
ICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImludGVnZXIiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJhcnJheSIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInN0cmluZyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInZhbHVlIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAib2JqZWN0IiwgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAg
ICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEdW1teU9iamVj
dCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQW4gb3BlbiBvYmplY3QgdGhhdCBkb2Vz
bid0IGhhdmUgYW55IHByZWRlZmluZWQgZmllbGRzLiIsCisgICAgICAgICAgICAidHlwZSI6ICJv
YmplY3QiCisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4iOiAiVGVzdCIsCisg
ICAgImRlc2NyaXB0aW9uIjogIlRlc3QgdGhlIGdlbmVyYXRpb24gb2Ygc3BlY2lhbCBiZWhhdmlv
cnMgdGhhdCBvbmx5IGFwcGx5IHRvIHNwZWNpZmljIGNsYXNzZXMuIiwKKyAgICAidHlwZXMiOiBb
CisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQYXJhbWV0ZXJCdW5kbGUiLAorICAgICAg
ICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJp
dGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJlcnJvciIsICIkcmVmIjogIkRhdGFiYXNlLkVycm9yIiB9CisgICAgICAgICAgICBdCisgICAg
ICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3Rz
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNkOTRi
ZTg5N2QyMmNjMDU4YmI2NDZmZWNkOWE0NzMwMzdiNmI5MgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUt
cmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgpAQCAtMCwwICsxLDUxIEBACitbCit7CisgICAg
ImRvbWFpbiI6ICJUZXN0IiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJUeXBlTmVlZGluZ0Nhc3QiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwK
KyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIGR1bW15IHR5cGUgdGhhdCByZXF1aXJlcyBy
dW50aW1lIGNhc3RzLCBhbmQgZm9yY2VzIG5vbi1wcmltaXRpdmUgcmVmZXJlbmNlZCB0eXBlcyB0
byBhbHNvIGVtaXQgcnVudGltZSBjYXN0IGhlbHBlcnMuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0
aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RyaW5nIiwgInR5cGUiOiAic3Ry
aW5nIiwgImRlc2NyaXB0aW9uIjogIlN0cmluZyBtZW1iZXIuIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibnVtYmVyIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJO
dW1iZXIgbWVtYmVyLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFuaW1hbHMiLCAi
JHJlZiI6ICJDYXN0ZWRBbmltYWxzIiwgImRlc2NyaXB0aW9uIjogIkVudW0gbWVtYmVyLiIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlkIiwgIiRyZWYiOiAiQ2FzdGVkT2JqZWN0SWQi
LCAiZGVzY3JpcHRpb24iOiAiQWxpYXNlZCBtZW1iZXIuIiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidHJlZSIsICIkcmVmIjogIlJlY3Vyc2l2ZU9iamVjdDEiLCAiZGVzY3JpcHRpb24i
OiAiUmVjdXJzaXZlIG9iamVjdCBtZW1iZXIuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJDYXN0ZWRPYmplY3RJZCIsCisgICAgICAg
ICAgICAidHlwZSI6ICJpbnRlZ2VyIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiVW5jYXN0ZWRPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2Vy
IgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVW5jYXN0ZWRBbmlt
YWxzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6
IFsiUGlncyIsICJDb3dzIiwgIkNhdHMiLCAiSGVucyJdCisgICAgICAgIH0sCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJDYXN0ZWRBbmltYWxzIiwKKyAgICAgICAgICAgICJ0eXBlIjog
InN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsiRHVja3MiLCAiSGVucyIsICJDcm93cyIs
ICJGbGFtaW5nb3MiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
UmVjdXJzaXZlT2JqZWN0MSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmoiLCAi
JHJlZiI6ICJSZWN1cnNpdmVPYmplY3QyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAg
ICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZWN1cnNpdmVP
YmplY3QyIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJv
cGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm9iaiIsICIkcmVmIjogIlJl
Y3Vyc2l2ZU9iamVjdDEiLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAg
ICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9pb3MvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9pb3MvZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MTdmMTM1ZWU1YTcy
MDk3YWUzZTEzMWJkZDQwZTYwMTY5OGFiMTBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2lvcy9kZWZpbml0aW9ucy13aXRo
LW1hYy1wbGF0Zm9ybS5qc29uCkBAIC0wLDAgKzEsMjggQEAKK3sKKyAgICAiZG9tYWluIjogIk5l
dHdvcmsiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk5l
dHdvcmtFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAg
InBsYXRmb3JtIjogIm1hY29zIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlw
dGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNv
ZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Cisg
ICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAg
ICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlIiwKKyAgICAgICAgICAgICJw
bGF0Zm9ybSI6ICJtYWNvcyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSBy
ZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3
aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9CisgICAgXSwKKyAgICAiZXZl
bnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIs
CisgICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAorICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkEgcmVzb3VyY2Ugd2FzIGxvYWRlZC4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvaW9z
L2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2lvcy9leHBlY3RlZC9k
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZmFk
YmE3Yjc0NTQ0ODNkNzQwOWVhNjY3ZGU3NmRhYjllNmU0ZGY4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2lvcy9leHBlY3Rl
ZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDgz
NSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKyMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlcy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlciB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFj
a2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RG
TW92ZShkaXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0
Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZh
dGU6CisgICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwor
fTsKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9u
cy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisj
ZW5kaWYKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAi
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsK
KworCisKKworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0
aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisKKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rl
c3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkK
K0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENv
bnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgorewor
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xs
ZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBl
ciBkZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRj
aGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5t
bQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24v
Rm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0Lmg+CisKKworCisKKworCisKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKKworCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgor
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgor
T2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09O
T2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKworCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgor
I2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvbWFjL2RlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvbWFjL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODE3ZjEzNWVlNWE3MjA5N2FlM2UxMzFiZGQ0MGU2MDE2OThhYjEwYwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9tYWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgpAQCAtMCwwICsxLDI4IEBA
Cit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJOZXR3b3JrRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAi
b2JqZWN0IiwKKyAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCisgICAgICAgICAgICAi
cHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlw
ZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlv
biI6ICJFcnJvciBjb2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAg
ICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNv
dXJjZSIsCisgICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAorICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBv
biB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAg
ICAgfQorICAgIF0sCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5h
bWUiOiAicmVzb3VyY2VMb2FkZWQiLAorICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwK
KyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIHJlc291cmNlIHdhcyBsb2FkZWQuIgorICAg
ICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL21hYy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9tYWMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1y
ZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNmYzNDhmMmE4YTVmOTlkNTRhMGM1MjQ0NTQ1NmI0OWY2NzY3YjQ1
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9tYWMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bi1yZXN1bHQKQEAgLTAsMCArMSwxMTcyIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFj
a2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisvLyBOZXR3b3JrLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck5l
dHdvcmtEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNo
ZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiTmV0d29yayIpOworSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckV2ZW50KCJOZXR3b3JrLnJlc291cmNlTG9hZGVkIiwgW10pOworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsubG9hZFJlc291cmNlIiwgW10sIFtdKTsKK0lu
c3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmsiKTsKKyMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7
CitwdWJsaWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERp
c3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShk
aXNwYXRjaGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigp
IGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6Cisg
ICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKwor
CitjbGFzcyBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3Vy
Y2UobG9uZyBjYWxsSWQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5k
IEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIg
eworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmKSA9
IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcigpOworfTsKKworY2xhc3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVi
bGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwg
TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYm
IG1lc3NhZ2UpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lk
IHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
KiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0
ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNw
YXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYKK3ByaXZh
dGU6CisgICAgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIE5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgi
CisjZW5kaWYKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK05ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6On5OZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1Jl
ZjxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6Y3Jl
YXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2Vu
ZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIk5ldHdvcmsi
KSwgdGhpcyk7Cit9CisKK3ZvaWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+
JiYgbWVzc2FnZSkKK3sKKyAgICBSZWY8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0
KCp0aGlzKTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAg
bWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOwor
CisgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikKKyAgICAgICAgbG9hZFJlc291cmNl
KHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgZWxzZQorICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiTmV0d29yayIsICcuJywgbWV0aG9kLCAi
JyB3YXMgbm90IGZvdW5kIikpOworfQorCit2b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmKQor
eworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmICht
X2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5s
b2FkUmVzb3VyY2UocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgor
CisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2Uo
ZXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICBl
bHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZv
cm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKwor
Y2xhc3MgTmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgTmV0d29ya0Zy
b250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9u
dGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9pZCByZXNvdXJjZUxvYWRlZCgp
OworcHJpdmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1w
bGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
IgorCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE5ldHdvcmtG
cm9udGVuZERpc3BhdGNoZXI6OnJlc291cmNlTG9hZGVkKCkKK3sKKyAgICBSZWY8SW5zcGVjdG9y
T2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAganNv
bk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwo
Ik5ldHdvcmsucmVzb3VyY2VMb2FkZWQiKSk7CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRF
dmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNl
IFByb3RvY29sIHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgTmV0d29y
ayB7CitjbGFzcyBOZXR3b3JrRXJyb3I7Cit9IC8vIE5ldHdvcmsKKy8vIEVuZCBvZiBmb3J3YXJk
IGRlY2xhcmF0aW9ucy4KKworCisKKworbmFtZXNwYWNlIE5ldHdvcmsgeworY2xhc3MgTmV0d29y
a0Vycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6
CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNl
dCA9IDEgPDwgMCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRz
U2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+
IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypOZXR3b3JrRXJyb3IqL0luc3Bl
Y3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2Jq
ZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9G
aWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0K
KyAgICAgICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBN
ZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIpLCB2YWx1ZSk7CisgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKworICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3Bl
cnR5X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIo
QVNDSUlMaXRlcmFsKCJjb2RlIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxOZXR3b3JrRXJyb3I+IHJl
bGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
bGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNh
bm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
bV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpy
ZWludGVycHJldF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJnJlc3VsdCkpOworICAgICAgICB9
CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAq
IFJlZjxOZXR3b3JrRXJyb3I+IHJlc3VsdCA9IE5ldHdvcmtFcnJvcjo6Y3JlYXRlKCkKKyAgICAg
KiAgICAgLnNldE1lc3NhZ2UoLi4uKQorICAgICAqICAgICAuc2V0Q29kZSguLi4pCisgICAgICog
ICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKworfSAvLyBOZXR3b3JrCisKKwor
Cit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFj
ZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xO
ZXR3b3JrRG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3Mg
T2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRl
cm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIE9iakNJbnNwZWN0
b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhh
bmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAg
UmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpCit7CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4o
TlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
KyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKSk7CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNh
bGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9
CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKwor
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJl
dGFpbiwgc2V0dGVyPXNldE5ldHdvcmtIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sTmV0d29ya0Rv
bWFpbkhhbmRsZXI+IG5ldHdvcmtIYW5kbGVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyICpuZXR3b3JrRXZl
bnREaXNwYXRjaGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1t
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMt
cGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAg
ICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRl
c3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBfbmV0d29ya0hhbmRsZXI7CisgICAgVGVz
dFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX25ldHdvcmtFdmVudERpc3Bh
dGNoZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIg
aW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChj
b250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNl
bGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfbmV0d29ya0hhbmRsZXIgcmVsZWFz
ZV07CisgICAgW19uZXR3b3JrRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBk
ZWFsbG9jXTsKK30KKworLSAodm9pZClzZXROZXR3b3JrSGFuZGxlcjooaWQ8VGVzdFByb3RvY29s
TmV0d29ya0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfbmV0
d29ya0hhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfbmV0d29ya0hhbmRsZXIgcmVs
ZWFzZV07CisgICAgX25ldHdvcmtIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1
dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqQ0luc3BlY3Rvck5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2Vu
dCA9IHN0ZDo6bWFrZV91bmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+PihBU0NJ
SUxpdGVyYWwoIk5ldHdvcmsiKSwgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3Bh
dGNoZXIpKTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVy
bmF0ZUFnZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVy
PiluZXR3b3JrSGFuZGxlcgoreworICAgIHJldHVybiBfbmV0d29ya0hhbmRsZXI7Cit9CisKKy0g
KFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKiluZXR3b3JrRXZlbnRE
aXNwYXRjaGVyCit7CisgICAgaWYgKCFfbmV0d29ya0V2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAg
X25ldHdvcmtFdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVu
dERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAg
cmV0dXJuIF9uZXR3b3JrRXZlbnREaXNwYXRjaGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
Q29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOwor
eworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRy
b2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpcmVzb3VyY2VMb2FkZWQKK3sK
KyAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5k
Um91dGVyKCk7CisKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxp
dGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiKSk7
CisgICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQor
CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9G
b3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmpl
Y3QuaD4KKworCitAY2xhc3MgVGVzdFByb3RvY29sTmV0d29ya0Vycm9yOworCisKKworCitfX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sTmV0d29ya0Vycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmlu
ZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKK0BlbmQKKworQHByb3RvY29sIFRlc3RQ
cm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0ByZXF1aXJlZAorLSAodm9p
ZClsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3Ip
KWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKCkpc3VjY2Vzc0NhbGxiYWNr
OworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRl
cmZhY2UgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0
CistICh2b2lkKXJlc291cmNlTG9hZGVkOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK0Bp
bnRlcmZhY2UgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0
ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT2JqQ0VudW1U
eXBlIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmtEb21haW4pCisKKysgKHZvaWQpX3Bh
cnNlTmV0d29ya0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29ya0RvbWFpbikKKworKyAodm9pZClfcGFyc2VOZXR3
b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9h
ZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9h
ZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29s
TmV0d29ya0Vycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+
CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OworCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IKKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcg
KiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKKyAgICBzZWxmLm1lc3NhZ2Ug
PSBwYXlsb2FkW0AibWVzc2FnZSJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKKyAgICBzZWxmLmNvZGUgPSBb
cGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOworCisgICAgcmV0dXJuIHNlbGY7Cit9Cist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kilqc29uT2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rv
ck9iamVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7
CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisK
KyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1l
c3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJd
OworfQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmlu
Z0ZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQorewor
ICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChpbnQp
Y29kZQoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKwor
QGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zYW1lLXR5cGUt
aWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZjRkZmY1Y2NjMjlkMGU4YzFmYTRiMmRkMzI4M2U3
NzE2MzJjN2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NhbWUtdHlwZS1p
ZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1b
Ci17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsK
LSAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6
ICJzdHJpbmciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRl
bnRpZmllci4iCi0gICAgICAgIH0KLSAgICBdCi19LAotewotICAgICJkb21haW4iOiAiUnVudGlt
ZTIiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlbW90
ZU9iamVjdElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKLSAgICAgICAgfQotICAg
IF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zaGFkb3dlZC1vcHRpb25hbC10
eXBlLXNldHRlcnMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBhMGMxNTUy
NzUwZjYyODI4OGNmZjQxOTM5NmJkNmY2YWY3NDlmZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKysrIC9kZXYv
bnVsbApAQCAtMSwzMSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJSdW50aW1lIiwKLSAgICAi
dHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJLZXlQYXRoIiwKLSAgICAg
ICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiS2V5
IHBhdGguIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAidHlwZSIsCi0gICAgICAgICAgICAgICAgICAg
ICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAgICAgICAgICJlbnVtIjogWyJudWxsIiwg
InN0cmluZyIsICJhcnJheSJdLAotICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
S2V5IHBhdGggdHlwZS4iCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICJuYW1lIjogInN0cmluZyIsCi0gICAgICAgICAgICAgICAgICAg
ICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAgICAgICAgICJvcHRpb25hbCI6IHRydWUs
Ci0gICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTdHJpbmcgdmFsdWUuIgotICAg
ICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAi
bmFtZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAg
ICAgICAgICAgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAg
Iml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJBcnJheSB2YWx1ZS4iCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
XQotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmM5ZDUzOTQ3OGRiNDk1Yzk2MDY3ZWNkNTRhOTViZTUy
ZjhkMDcwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0
aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEwICsw
LDAgQEAKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAotICAgICJ0eXBlcyI6IFsKLSAgICAg
ICAgewotICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKLSAgICAgICAgICAgICJ0
eXBlIjogImludGVnZXIiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmpl
Y3QgaWRlbnRpZmllci4iCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1h
cnJheS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGNmYjA4YmQ5NDBiNjRmYjY2MDM5NjVjZTFiMDRkM2ZjOTc0OWVhOTAuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYXJyYXkt
dHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotWwotewotICAgICJkb21h
aW4iOiAiRGVidWdnZXIiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAg
ImlkIjogIkJyZWFrcG9pbnRJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgotICAg
ICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVhc29uIiwKLSAgICAgICAg
ICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZW51bSI6IFsiRGllZCIsICJGYWlu
dGVkIiwgIkh1bmdyeSJdCi0gICAgICAgIH0KLSAgICBdCi19LAotewotICAgICJkb21haW4iOiAi
UnVudGltZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAi
T2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKLSAgICAgICAgfSwKLSAg
ICAgICAgewotICAgICAgICAgICAgImlkIjogIkx1Y2t5TnVtYmVycyIsCi0gICAgICAgICAgICAi
dHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAiaXRlbXMiOiB7ICJ0eXBlIjogImludGVnZXIi
IH0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkJhYnlOYW1lcyIs
Ci0gICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAiaXRlbXMiOiB7ICJ0
eXBlIjogInN0cmluZyIgfQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQi
OiAiTmV3T2JqZWN0cyIsCi0gICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAg
ICAiaXRlbXMiOiB7ICIkcmVmIjogIk9iamVjdElkIiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsK
LSAgICAgICAgICAgICJpZCI6ICJPbGRPYmplY3RzIiwKLSAgICAgICAgICAgICJ0eXBlIjogImFy
cmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiRGVidWdnZXIuQnJlYWtwb2lu
dElkIiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJTdG9wUmVh
c29ucyIsCi0gICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAiaXRlbXMi
OiB7ICIkcmVmIjogIkRlYnVnZ2VyLlJlYXNvbiIgfQotICAgICAgICB9Ci0gICAgXQotfQotXQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYwYWVlOWM5MWI5NWFiYWYzODdlNzJhOTFh
MzMzOGI1NzlkYTlhYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1k
ZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAK
LXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewot
ICAgICAgICAgICAgImlkIjogIkZhcm1BbmltYWxzIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0
cmluZyIsCi0gICAgICAgICAgICAiZW51bSI6IFsiUGlncyIsICJDb3dzIiwgIkNhdHMiLCAiSGVu
cyJdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJUd29MZWdnZWRB
bmltYWxzIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZW51
bSI6IFsiRHVja3MiLCAiSGVucyIsICJDcm93cyIsICJGbGFtaW5nb3MiXQotICAgICAgICB9Ci0g
ICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLW9iamVj
dC10eXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3ODMwOTE5NzNiY2Yz
NzU0NWNkNzU5NjA5MTg2N2Y4Y2EyNWQ4NWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorKysgL2Rldi9udWxsCkBA
IC0xLDgzICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAiZGVz
Y3JpcHRpb24iOiAiVGVzdCB0eXBlIGJ1aWxkZXIgZ2VuZXJhdGlvbiBvZiB2YXJpb3VzIG9iamVj
dCB0eXBlcy4iLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjog
IkVycm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjog
WwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIs
ICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNv
ZGUuIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJpZCI6ICJFcnJvckxpc3QiLAotICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAgICAg
ICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJFcnJvciIgfQotICAgICAgICB9LAotICAgICAgICB7
Ci0gICAgICAgICAgICAiaWQiOiAiT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUiLAotICAgICAgICAg
ICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRp
b25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRy
dWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51
bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZh
bHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvciIsICIkcmVmIjogIkVycm9yIiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3JMaXN0
IiwgIiRyZWYiOiAiRXJyb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBd
Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQYXJhbWV0ZXJCdW5k
bGUiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0
aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6
ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJlcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZXJyb3JMaXN0IiwgIiRyZWYiOiAiRXJyb3JMaXN0IiB9Ci0gICAgICAgICAg
ICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJPYmplY3RXaXRo
UHJvcGVydHlOYW1lQ29uZmxpY3RzIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDb25m
bGljdGVkIG5hbWVzIG1heSBjYXVzZSBnZW5lcmF0ZWQgZ2V0dGVycy9zZXR0ZXJzIHRvIGNsYXNo
IHdpdGggYnVpbHQtaW4gSW5zcGVjdG9yT2JqZWN0IG1ldGhvZHMuIiwKLSAgICAgICAgICAgICJ0
eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImludGVnZXIiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJhcnJheSIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInN0cmluZyIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInZhbHVlIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAib2JqZWN0IiwgInR5cGUiOiAic3RyaW5nIiB9Ci0gICAgICAgICAgICBd
Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJEdW1teU9iamVjdCIs
Ci0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQW4gb3BlbiBvYmplY3QgdGhhdCBkb2Vzbid0
IGhhdmUgYW55IHByZWRlZmluZWQgZmllbGRzLiIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmpl
Y3QiCi0gICAgICAgIH0KLSAgICBdCi19LAotewotICAgICJkb21haW4iOiAiVGVzdCIsCi0gICAg
ImRlc2NyaXB0aW9uIjogIlRlc3QgdGhlIGdlbmVyYXRpb24gb2Ygc3BlY2lhbCBiZWhhdmlvcnMg
dGhhdCBvbmx5IGFwcGx5IHRvIHNwZWNpZmljIGNsYXNzZXMuIiwKLSAgICAidHlwZXMiOiBbCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQYXJhbWV0ZXJCdW5kbGUiLAotICAgICAgICAg
ICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVt
cyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJu
b3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRp
bWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJl
cnJvciIsICIkcmVmIjogIkRhdGFiYXNlLkVycm9yIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAg
IH0KLSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtcmVxdWlyaW5n
LXJ1bnRpbWUtY2FzdHMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNkOTRi
ZTg5N2QyMmNjMDU4YmI2NDZmZWNkOWE0NzMwMzdiNmI5Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisrKyAvZGV2
L251bGwKQEAgLTEsNTEgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiVGVzdCIsCi0gICAg
InR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiVHlwZU5lZWRpbmdDYXN0
IiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiQSBkdW1teSB0eXBlIHRoYXQgcmVxdWlyZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNl
cyBub24tcHJpbWl0aXZlIHJlZmVyZW5jZWQgdHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2Fz
dCBoZWxwZXJzLiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInN0cmluZyIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJT
dHJpbmcgbWVtYmVyLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm51bWJlciIsICJ0
eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG1lbWJlci4iIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJhbmltYWxzIiwgIiRyZWYiOiAiQ2FzdGVkQW5pbWFscyIs
ICJkZXNjcmlwdGlvbiI6ICJFbnVtIG1lbWJlci4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJpZCIsICIkcmVmIjogIkNhc3RlZE9iamVjdElkIiwgImRlc2NyaXB0aW9uIjogIkFsaWFz
ZWQgbWVtYmVyLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRyZWUiLCAiJHJlZiI6
ICJSZWN1cnNpdmVPYmplY3QxIiwgImRlc2NyaXB0aW9uIjogIlJlY3Vyc2l2ZSBvYmplY3QgbWVt
YmVyLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAg
ICAiaWQiOiAiQ2FzdGVkT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIK
LSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlVuY2FzdGVkT2JqZWN0
SWQiLAotICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKLSAgICAgICAgfSwKLSAgICAgICAg
ewotICAgICAgICAgICAgImlkIjogIlVuY2FzdGVkQW5pbWFscyIsCi0gICAgICAgICAgICAidHlw
ZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBbIlBpZ3MiLCAiQ293cyIsICJDYXRz
IiwgIkhlbnMiXQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQ2Fz
dGVkQW5pbWFscyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAg
ImVudW0iOiBbIkR1Y2tzIiwgIkhlbnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29zIl0KLSAgICAgICAg
fSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlY3Vyc2l2ZU9iamVjdDEiLAotICAg
ICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib2JqIiwgIiRyZWYiOiAiUmVjdXJzaXZlT2JqZWN0
MiIsICJvcHRpb25hbCI6IHRydWUgfQotICAgICAgICAgICAgXQotICAgICAgICB9LAotICAgICAg
ICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVjdXJzaXZlT2JqZWN0MiIsCi0gICAgICAgICAgICAi
dHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJvYmoiLCAiJHJlZiI6ICJSZWN1cnNpdmVPYmplY3QxIiwgIm9wdGlv
bmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYg
LS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzhlNWFmNWI4
NTJmMjQwMTgzMzYyMzI1OGJlMTE5YWM0MTFlZDBkNy4uNGVlM2NkNzk0NWQ0OTQ1YzA3MjYwMjlj
NzQ2NjIzNzE4YmUxOTJiMSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE2LTEyLTIxICBCcmlhbiBCdXJnICA8YmJ1
cmdAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHRlYWNoIHRoZSBwcm90b2Nv
bCBnZW5lcmF0b3IgYWJvdXQgcGxhdGZvcm0tc3BlY2lmaWMgdHlwZXMsIGV2ZW50cywgYW5kIGNv
bW1hbmRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjYwMDMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI4NzE4OTkwPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlYWNoIHJ1bi1pbnNwZWN0b3ItZ2Vu
ZXJhdG9yLXRlc3RzIHRvIGdlbmVyYXRlIHRlc3Qgb3V0cHV0IHVzaW5nIHRoZSBwbGF0Zm9ybSBu
YW1lCisgICAgICAgIGRlcml2ZWQgZnJvbSB0aGUgZGlyZWN0b3J5IHRoYXQgdGhlIHRlc3QgaXMg
aW4uIEZvciBleGFtcGxlLCB0ZXN0cyBpbiB0aGUgL2dlbmVyaWMvCisgICAgICAgIHN1YmRpcmVj
dG9yeSB3aWxsIHBhc3MgYC0tcGxhdGZvcm0gZ2VuZXJpY2AgdG8gZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9pbnNw
ZWN0b3IvbWFpbi5weToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLmdlbmVyYXRl
X2Zyb21fanNvbik6CisgICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cy5ydW5fdGVzdHMp
OgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMubWFpbik6CisKIDIwMTYtMTItMjEg
IFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNzZW1ibHk6
IEltcG9ydCBzcGVjIHRlc3RzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2lu
c3BlY3Rvci9tYWluLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5w
eQppbmRleCAyMjQ0ZDRjNzgyY2FlN2RhYWFmMjY3N2MwNGUyMzZjNzhmOThkMTRlLi5hOGZjZjJh
NDE4NDA3MjM1ZmNhNDAyNDRiZmY0NTJhMGFkNjQ0ZGM3IDEwMDY0NAotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2luc3BlY3Rvci9tYWluLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvaW5zcGVjdG9yL21haW4ucHkKQEAgLTM4LDEzICszOCwxNCBAQCBjbGFzcyBJbnNwZWN0b3JH
ZW5lcmF0b3JUZXN0czoKICAgICAgICAgc2VsZi5yZXNldF9yZXN1bHRzID0gcmVzZXRfcmVzdWx0
cwogICAgICAgICBzZWxmLmV4ZWN1dGl2ZSA9IGV4ZWN1dGl2ZQogCi0gICAgZGVmIGdlbmVyYXRl
X2Zyb21fanNvbihzZWxmLCBqc29uX2ZpbGUsIG91dHB1dF9kaXJlY3RvcnkpOgorICAgIGRlZiBn
ZW5lcmF0ZV9mcm9tX2pzb24oc2VsZiwganNvbl9maWxlLCBwbGF0Zm9ybSwgb3V0cHV0X2RpcmVj
dG9yeSk6CiAgICAgICAgIGNtZCA9IFsncHl0aG9uJywKICAgICAgICAgICAgICAgICdKYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHknLAogICAgICAgICAgICAgICAgJy0tb3V0cHV0RGlyJywgb3V0cHV0X2RpcmVjdG9y
eSwKICAgICAgICAgICAgICAgICctLWZvcmNlJywKICAgICAgICAgICAgICAgICctLWZyYW1ld29y
aycsICdUZXN0JywKICAgICAgICAgICAgICAgICctLXRlc3QnLAorICAgICAgICAgICAgICAgJy0t
cGxhdGZvcm0nLCBwbGF0Zm9ybSwKICAgICAgICAgICAgICAgIGpzb25fZmlsZV0KIAogICAgICAg
ICBleGl0X2NvZGUgPSAwCkBAIC04Nyw3ICs4OCw3IEBAIGNsYXNzIEluc3BlY3RvckdlbmVyYXRv
clRlc3RzOgogICAgICAgICAgICAgICAgIHByaW50ICdQQVNTOiAlcycgJSBvdXRwdXRfZmlsZQog
ICAgICAgICByZXR1cm4gY2hhbmdlc19mb3VuZAogCi0gICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBp
bnB1dF9kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgorICAgIGRlZiBydW5fdGVzdHMo
c2VsZiwgcGxhdGZvcm0sIGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CiAg
ICAgICAgIHdvcmtfZGlyZWN0b3J5ID0gcmVmZXJlbmNlX2RpcmVjdG9yeQogCiAgICAgICAgIHBh
c3NlZCA9IFRydWUKQEAgLTEwMCw3ICsxMDEsNyBAQCBjbGFzcyBJbnNwZWN0b3JHZW5lcmF0b3JU
ZXN0czoKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJlc2V0X3Jlc3VsdHM6CiAgICAgICAgICAg
ICAgICAgd29ya19kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKIAotICAgICAgICAgICAg
aWYgc2VsZi5nZW5lcmF0ZV9mcm9tX2pzb24ob3MucGF0aC5qb2luKGlucHV0X2RpcmVjdG9yeSwg
aW5wdXRfZmlsZSksIHdvcmtfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIGlmIHNlbGYuZ2VuZXJh
dGVfZnJvbV9qc29uKG9zLnBhdGguam9pbihpbnB1dF9kaXJlY3RvcnksIGlucHV0X2ZpbGUpLCBw
bGF0Zm9ybSwgd29ya19kaXJlY3RvcnkpOgogICAgICAgICAgICAgICAgIHBhc3NlZCA9IEZhbHNl
CiAKICAgICAgICAgICAgIGlmIHNlbGYucmVzZXRfcmVzdWx0czoKQEAgLTEyMCwxMCArMTIxLDIy
IEBAIGNsYXNzIEluc3BlY3RvckdlbmVyYXRvclRlc3RzOgogCiAgICAgICAgIGFsbF90ZXN0c19w
YXNzZWQgPSBUcnVlCiAKLSAgICAgICAgaW5wdXRfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKCdK
YXZhU2NyaXB0Q29yZScsICdpbnNwZWN0b3InLCAnc2NyaXB0cycsICd0ZXN0cycpCi0gICAgICAg
IHJlZmVyZW5jZV9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oJ0phdmFTY3JpcHRDb3JlJywgJ2lu
c3BlY3RvcicsICdzY3JpcHRzJywgJ3Rlc3RzJywgJ2V4cGVjdGVkJykKLSAgICAgICAgaWYgbm90
IHNlbGYucnVuX3Rlc3RzKGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6Ci0g
ICAgICAgICAgICBhbGxfdGVzdHNfcGFzc2VkID0gRmFsc2UKKyAgICAgICAgYmFzZV9kaXJlY3Rv
cnkgPSBvcy5wYXRoLmpvaW4oJ0phdmFTY3JpcHRDb3JlJywgJ2luc3BlY3RvcicsICdzY3JpcHRz
JywgJ3Rlc3RzJykKKworICAgICAgICBwbGF0Zm9ybV9kaXJlY3RvcmllcyA9IHsKKyAgICAgICAg
ICAgICdtYWNvcyc6ICdtYWMnLAorICAgICAgICAgICAgJ2lvcyc6ICdpb3MnLAorICAgICAgICAg
ICAgJ2dlbmVyaWMnOiAnZ2VuZXJpYycsCisgICAgICAgICAgICAnYWxsJzogJ2FsbCcsCisgICAg
ICAgIH0KKworICAgICAgICBmb3IgcGxhdGZvcm1fbmFtZSwgcGxhdGZvcm1fZGlyZWN0b3J5IGlu
IHBsYXRmb3JtX2RpcmVjdG9yaWVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaW5wdXRfZGly
ZWN0b3J5ID0gb3MucGF0aC5qb2luKGJhc2VfZGlyZWN0b3J5LCBwbGF0Zm9ybV9kaXJlY3Rvcnkp
CisgICAgICAgICAgICByZWZlcmVuY2VfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKGlucHV0X2Rp
cmVjdG9yeSwgJ2V4cGVjdGVkJykKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGlu
cHV0X2RpcmVjdG9yeSkgb3Igbm90IG9zLnBhdGguaXNkaXIoaW5wdXRfZGlyZWN0b3J5KToKKyAg
ICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBhbGxfdGVzdHNfcGFzc2VkID0g
YWxsX3Rlc3RzX3Bhc3NlZCBhbmQgc2VsZi5ydW5fdGVzdHMocGxhdGZvcm1fbmFtZSwgaW5wdXRf
ZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5KQogCiAgICAgICAgIHByaW50ICcnCiAgICAg
ICAgIGlmIGFsbF90ZXN0c19wYXNzZWQ6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297640</attachid>
            <date>2016-12-21 17:24:53 -0800</date>
            <delta_ts>2016-12-21 17:24:53 -0800</delta_ts>
            <desc>[PATCH 2/3 v2] Move test cases into platform-specific directories</desc>
            <filename>clean.patch</filename>
            <type>text/plain</type>
            <size>43638</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">Y29tbWl0IDIxNjM0MzIwNjc5M2NkMzA0ZjQzNWRlOWQxNWQ3MWVlZWFjYjUzYTAKQXV0aG9yOiBC
cmlhbiBCdXJnIDxiYnVyZ0BhcHBsZS5jb20+CkRhdGU6ICAgV2VkIERlYyAyMSAxNDo0OTo0OCAy
MDE2IC0wODAwCgogICAgV2ViIEluc3BlY3RvcjogdGVhY2ggdGhlIHByb3RvY29sIGdlbmVyYXRv
ciBhYm91dCBwbGF0Zm9ybS1zcGVjaWZpYyB0eXBlcywgZXZlbnRzLCBhbmQgY29tbWFuZHMKICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYwMDMKICAgIDxyZGFy
Oi8vcHJvYmxlbS8yODcxODk5MD4KICAgIAogICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CiAgICAKICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZToKICAgIAogICAgTWFrZSBpdCBwb3NzaWJs
ZSB0byB0ZXN0IGluc3BlY3RvciBwcm90b2NvbCBnZW5lcmF0b3Igb3V0cHV0IGZvciBkaWZmZXJl
bnQgcGxhdGZvcm1zLgogICAgCiAgICBNb3ZlIGV4aXN0aW5nIHRlc3RzIHRvIHRoZSBnZW5lcmlj
LyBzdWJkaXJlY3RvcnksIGFzIHRoZXkgYXJlIHRvIGJlIGdlbmVyYXRlZAogICAgd2l0aG91dCBh
bnkgc3BlY2lmaWMgcGxhdGZvcm0uIExhdGVyLCBwbGF0Zm9ybS1zcGVjaWZpYyBnZW5lcmF0b3Ig
YmVoYXZpb3Igd2lsbCBiZQogICAgdGVzdGVkIGJ5IGNsb25pbmcgdGhlIHNhbWUgdGVzdCB0byBt
dWx0aXBsZSBwbGF0Zm9ybSBkaXJlY3Rvcmllcy4KICAgIAogICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0c3svID0+IC9nZW5lcmljL31jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29u
CiAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWNvbW1hbmRzLXdp
dGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCiAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQt
c2l6ZXMuanNvbgogICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31l
bnVtLXZhbHVlcy5qc29uCiAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVy
aWMvfWV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgogICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5j
LWF0dHJpYnV0ZS5qc29uLXJlc3VsdAogICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+
IC9nZW5lcmljL31leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBh
cmFtZXRlcnMuanNvbi1yZXN1bHQKICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAv
Z2VuZXJpYy99ZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29u
LXJlc3VsdAogICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBl
Y3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdAogICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJz
Lmpzb24tcmVzdWx0CiAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMv
fWV4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWF2YWlsYWJpbGl0eS5qc29uLWVycm9yCiAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2ZhaWwtb24tZHVw
bGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgogICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9mYWlsLW9uLWR1cGxp
Y2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgogICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9mYWlsLW9uLWR1cGxp
Y2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgogICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBl
LWRlY2xhcmF0aW9ucy5qc29uLWVycm9yCiAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8g
PT4gL2dlbmVyaWMvfWV4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVz
Lmpzb24tZXJyb3IKICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99
ZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJyb3IKICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvZmFpbC1vbi1udW1i
ZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgogICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9mYWlsLW9uLW51bWJlci10
eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCiAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9w
dGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IKICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9u
YWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgogICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3sv
ID0+IC9nZW5lcmljL31leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlw
ZS1yZWZlcmVuY2UuanNvbi1lcnJvcgogICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+
IC9nZW5lcmljL31leHBlY3RlZC9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10
eXBlLmpzb24tZXJyb3IKICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJp
Yy99ZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvcgog
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9mYWls
LW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9y
CiAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2Zh
aWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yCiAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2dlbmVy
YXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdAogICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlm
ZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdAogICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3sv
ID0+IC9nZW5lcmljL31leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNv
bi1yZXN1bHQKICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0
CiAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL3R5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdAogICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0t
dHlwZS5qc29uLXJlc3VsdAogICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5l
cmljL31leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CiAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL3R5cGUt
cmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZmFpbC1vbi1kb21haW4tYXZhaWxhYmlsaXR5Lmpzb24K
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZmFpbC1vbi1kdXBs
aWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uCiAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0
dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uCiAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8g
PT4gL2dlbmVyaWMvfWZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29u
CiAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWZhaWwtb24tZHVw
bGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24KICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHN7LyA9PiAvZ2VuZXJpYy99ZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNv
bgogICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31mYWlsLW9uLWVu
dW0td2l0aC1uby12YWx1ZXMuanNvbgogICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+
IC9nZW5lcmljL31mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5q
c29uCiAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWZhaWwtb24t
bnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwt
cGFyYW1ldGVyLWZsYWcuanNvbgogICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9n
ZW5lcmljL31mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uCiAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWZhaWwtb24tdHlwZS1k
ZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCiAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0
aXZlLXR5cGUuanNvbgogICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmlj
L31mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uCiAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5j
ZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24KICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7
LyA9PiAvZ2VuZXJpYy99ZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVt
YmVyLmpzb24KICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99Z2Vu
ZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4u
anNvbgogICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31zaGFkb3dl
ZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgogICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
c3svID0+IC9nZW5lcmljL310eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUu
anNvbgogICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL310eXBlLWRl
Y2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgogICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3sv
ID0+IC9nZW5lcmljL310eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCiAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfXR5cGUtZGVjbGFyYXRpb24tb2JqZWN0
LXR5cGUuanNvbgogICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL310
eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KICAgIAogICAgVG9vbHM6CiAgICAKICAg
IFRlYWNoIHJ1bi1pbnNwZWN0b3ItZ2VuZXJhdG9yLXRlc3RzIHRvIGdlbmVyYXRlIHRlc3Qgb3V0
cHV0IHVzaW5nIHRoZSBwbGF0Zm9ybSBuYW1lCiAgICBkZXJpdmVkIGZyb20gdGhlIGRpcmVjdG9y
eSB0aGF0IHRoZSB0ZXN0IGlzIGluLiBGb3IgZXhhbXBsZSwgdGVzdHMgaW4gdGhlIC9nZW5lcmlj
LwogICAgc3ViZGlyZWN0b3J5IHdpbGwgcGFzcyBgLS1wbGF0Zm9ybSBnZW5lcmljYCB0byBnZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkuCiAgICAKICAgICogU2NyaXB0cy93
ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weToKICAgIChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cy5n
ZW5lcmF0ZV9mcm9tX2pzb24pOgogICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLnJ1bl90ZXN0
cyk6CiAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMubWFpbik6CgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKaW5kZXggMGU0ZmIxMC4uMTE5ZmJhOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNzYgQEAKKzIwMTYtMTItMjEgIEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogdGVhY2ggdGhlIHByb3RvY29sIGdlbmVyYXRvciBh
Ym91dCBwbGF0Zm9ybS1zcGVjaWZpYyB0eXBlcywgZXZlbnRzLCBhbmQgY29tbWFuZHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjAwMworICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMjg3MTg5OTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTWFrZSBpdCBwb3NzaWJsZSB0byB0ZXN0IGluc3BlY3RvciBw
cm90b2NvbCBnZW5lcmF0b3Igb3V0cHV0IGZvciBkaWZmZXJlbnQgcGxhdGZvcm1zLgorCisgICAg
ICAgIE1vdmUgZXhpc3RpbmcgdGVzdHMgdG8gdGhlIGdlbmVyaWMvIHN1YmRpcmVjdG9yeSwgYXMg
dGhleSBhcmUgdG8gYmUgZ2VuZXJhdGVkCisgICAgICAgIHdpdGhvdXQgYW55IHNwZWNpZmljIHBs
YXRmb3JtLiBMYXRlciwgcGxhdGZvcm0tc3BlY2lmaWMgZ2VuZXJhdG9yIGJlaGF2aW9yIHdpbGwg
YmUKKyAgICAgICAgdGVzdGVkIGJ5IGNsb25pbmcgdGhlIHNhbWUgdGVzdCB0byBtdWx0aXBsZSBw
bGF0Zm9ybSBkaXJlY3Rvcmllcy4KKworICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
ey8gPT4gL2dlbmVyaWMvfWNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31jb21tYW5kcy13aXRo
LW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dl
bmVyaWMvfWVudW0tdmFsdWVzLmpzb24KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
c3svID0+IC9nZW5lcmljL31ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9j
b21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdAorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2NvbW1hbmRzLXdpdGgt
b3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdAorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2RvbWFpbnMtd2l0
aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJl
c3VsdAorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4
cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9mYWls
LW9uLWRvbWFpbi1hdmFpbGFiaWxpdHkuanNvbi1lcnJvcgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNv
bW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRl
LWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvZmFpbC1vbi1kdXBs
aWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0
ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1t
ZW1iZXItbmFtZXMuanNvbi1lcnJvcgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
ey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29u
LWVycm9yCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99
ZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNv
bi1lcnJvcgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMv
fWV4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24t
ZXJyb3IKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31l
eHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29u
LWVycm9yCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99
ZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1l
cnJvcgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4
cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29u
LWVycm9yCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99
ZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uLWVy
cm9yCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhw
ZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvcgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2ZhaWwt
b24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24tZXJyb3IK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3Rl
ZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJv
cgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVj
dGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdAorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL3Nh
bWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9u
YWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpz
b24tcmVzdWx0CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJp
Yy99ZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC90eXBl
LWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVu
dGltZS1jYXN0cy5qc29uLXJlc3VsdAorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
ey8gPT4gL2dlbmVyaWMvfWZhaWwtb24tZG9tYWluLWF2YWlsYWJpbGl0eS5qc29uCisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZmFpbC1vbi1kdXBsaWNh
dGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uCisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1y
ZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0c3svID0+IC9nZW5lcmljL31mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFt
ZXMuanNvbgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMv
fWZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24KKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31mYWlsLW9uLWR1cGxpY2F0ZS10eXBl
LW1lbWJlci1uYW1lcy5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9
PiAvZ2VuZXJpYy99ZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24KKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31mYWlsLW9uLW51bWJlci10eXBl
ZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlw
ZS1tZW1iZXIuanNvbgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dl
bmVyaWMvfWZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24K
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31mYWlsLW9u
LXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uCisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9u
LXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0c3svID0+IC9nZW5lcmljL31mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10
eXBlLmpzb24KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmlj
L31mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uCisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZmFpbC1vbi11bmtub3duLXR5cGUtcmVm
ZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbgorICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1p
bi10eXBlLW1lbWJlci5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9
PiAvZ2VuZXJpYy99Z2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31zYW1lLXR5cGUt
aWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHN7LyA9PiAvZ2VuZXJpYy99c2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL310eXBlLWRlY2xh
cmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfXR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5q
c29uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99dHlw
ZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L3Rlc3Rzey8gPT4gL2dlbmVyaWMvfXR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfXR5cGUtcmVx
dWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorCiAyMDE2LTEyLTE3ICBCcmlhbiBCdXJnICA8YmJ1
cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHRlYWNoIHRoZSBwcm90b2Nv
bCBnZW5lcmF0b3IgYWJvdXQgcGxhdGZvcm0tc3BlY2lmaWMgdHlwZXMsIGV2ZW50cywgYW5kIGNv
bW1hbmRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1hbmRzLXdpdGgt
YXN5bmMtYXR0cmlidXRlLmpzb24Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRo
LWFzeW5jLWF0dHJpYnV0ZS5qc29uCnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0
ZS5qc29uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgpzaW1p
bGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFy
YW1ldGVycy5qc29uCnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBh
cmFtZXRlcnMuanNvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Rv
bWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgpzaW1pbGFyaXR5IGluZGV4IDEw
MCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgpyZW5hbWUgdG8gU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWlu
cy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2VudW0t
dmFsdWVzLmpzb24Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9lbnVtLXZhbHVlcy5qc29uCnJlbmFt
ZSB0byBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9lbnVtLXZhbHVlcy5qc29uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCnNpbWlsYXJpdHkgaW5kZXggMTAw
JQpyZW5hbWUgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCnJlbmFtZSB0byBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9ldmVudHMtd2l0
aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5j
LWF0dHJpYnV0ZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmli
dXRlLmpzb24tcmVzdWx0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMt
d2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRz
LXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0
aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29t
bWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CnNp
bWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxs
LXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdApzaW1pbGFyaXR5
IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMu
anNvbi1yZXN1bHQKcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQt
c2l6ZXMuanNvbi1yZXN1bHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUg
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpz
b24tcmVzdWx0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1
bHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1w
YXJhbWV0ZXJzLmpzb24tcmVzdWx0CnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25h
bC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tYXZhaWxh
YmlsaXR5Lmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1hdmFpbGFiaWxpdHkuanNv
bi1lcnJvcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWF2
YWlsYWJpbGl0eS5qc29uLWVycm9yCnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWRvbWFpbi1hdmFp
bGFiaWxpdHkuanNvbi1lcnJvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQt
Y2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRl
LWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpzaW1pbGFyaXR5IGluZGV4
IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXIt
bmFtZXMuanNvbi1lcnJvcgpyZW5hbWUgdG8gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFu
ZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBs
aWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9m
YWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJv
cgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1h
bmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCnJlbmFtZSB0byBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uLWVy
cm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24t
ZXJyb3IKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1l
dmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpyZW5hbWUgdG8gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1k
dXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1v
bi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvcgpzaW1pbGFyaXR5IGluZGV4
IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24t
ZXJyb3IKcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25z
Lmpzb24tZXJyb3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1l
cy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMu
anNvbi1lcnJvcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGlj
YXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24tZXJyb3IKcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24t
ZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24tZXJyb3IKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZW51bS13aXRo
LW5vLXZhbHVlcy5qc29uLWVycm9yCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJyb3IKcmVuYW1lIHRvIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwt
b24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uLWVycm9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1i
ZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwt
b24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IKc2ltaWxh
cml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1w
YXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10
eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvciBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Zh
aWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKc2ltaWxh
cml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10
eXBlLW1lbWJlci5qc29uLWVycm9yCnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBl
ZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJp
bmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwt
b24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IKc2ltaWxh
cml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1w
YXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10
eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvciBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Zh
aWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKc2ltaWxh
cml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10
eXBlLW1lbWJlci5qc29uLWVycm9yCnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBl
ZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBl
LWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWls
LW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgpzaW1p
bGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2lu
Zy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yCnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUt
ZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Zh
aWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbi1lcnJvciBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbi1lcnJvcgpzaW1p
bGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJp
bWl0aXZlLXR5cGUuanNvbi1lcnJvcgpyZW5hbWUgdG8gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXJlZmVy
ZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uLWVycm9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBl
LXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRo
LWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yCnJlbmFtZSB0byBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNv
bi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRl
Y2xhcmF0aW9uLmpzb24tZXJyb3IKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9y
CnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1k
ZWNsYXJhdGlvbi5qc29uLWVycm9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVm
ZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24t
dHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpzaW1pbGFyaXR5IGluZGV4
IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1l
bWJlci5qc29uLWVycm9yCnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZl
cmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFp
bnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFp
bnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdApzaW1pbGFyaXR5IGluZGV4IDEwMCUK
cmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3Vs
dApyZW5hbWUgdG8gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpz
b24tcmVzdWx0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1y
ZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdApz
aW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9t
YWluLmpzb24tcmVzdWx0CnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uLXJlc3VsdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVy
cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29u
LXJlc3VsdApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFs
LXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdApyZW5hbWUgdG8gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9u
YWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1h
bGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlv
bi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CnNpbWlsYXJpdHkgaW5kZXggMTAw
JQpyZW5hbWUgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24t
cmVzdWx0CnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZl
LXR5cGUuanNvbi1yZXN1bHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUu
anNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1
bHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5
LXR5cGUuanNvbi1yZXN1bHQKcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXkt
dHlwZS5qc29uLXJlc3VsdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQK
c2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlw
ZS5qc29uLXJlc3VsdApyZW5hbWUgdG8gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUu
anNvbi1yZXN1bHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdApz
aW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5
cGUuanNvbi1yZXN1bHQKcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5
cGUuanNvbi1yZXN1bHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3Vs
dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbi1yZXN1bHQKcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbi1yZXN1bHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWRvbWFpbi1hdmFpbGFiaWxpdHkuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwt
b24tZG9tYWluLWF2YWlsYWJpbGl0eS5qc29uCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUg
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi1kb21haW4tYXZhaWxhYmlsaXR5Lmpzb24KcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLWF2YWlsYWJp
bGl0eS5qc29uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1l
cy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29u
CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBh
cmFtZXRlci1uYW1lcy5qc29uCnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwt
cGFyYW1ldGVyLW5hbWVzLmpzb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1w
YXJhbWV0ZXItbmFtZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFt
ZXRlci1uYW1lcy5qc29uCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUt
Y29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24KcmVuYW1lIHRvIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGlj
YXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNh
dGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJh
bWV0ZXItbmFtZXMuanNvbgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRl
LWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uCnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVu
dC1wYXJhbWV0ZXItbmFtZXMuanNvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRp
b25zLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uCnNpbWlsYXJp
dHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbgpy
ZW5hbWUgdG8gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24t
ZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1l
bWJlci1uYW1lcy5qc29uCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUt
dHlwZS1tZW1iZXItbmFtZXMuanNvbgpyZW5hbWUgdG8gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1i
ZXItbmFtZXMuanNvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1l
bnVtLXdpdGgtbm8tdmFsdWVzLmpzb24Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWVu
dW0td2l0aC1uby12YWx1ZXMuanNvbgpyZW5hbWUgdG8gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVz
Lmpzb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgpzaW1pbGFy
aXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1m
bGFnLmpzb24KcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1m
bGFnLmpzb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgpzaW1pbGFyaXR5
IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpz
b24KcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1v
bi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgpzaW1pbGFyaXR5IGlu
ZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpz
b24KcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpz
b24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1v
bi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgpzaW1pbGFyaXR5IGluZGV4
IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KcmVu
YW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlw
ZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCnNpbWlsYXJpdHkgaW5kZXgg
MTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24K
cmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10
eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uCnNpbWlsYXJpdHkgaW5kZXggMTAw
JQpyZW5hbWUgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uCnJlbmFtZSB0
byBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9m
YWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5
cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5h
bWUuanNvbgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2Fz
ZS1uYW1lLmpzb24KcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbgpz
aW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10
eXBlLWRlY2xhcmF0aW9uLmpzb24KcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5j
ZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVu
Y2UtaW4tdHlwZS1tZW1iZXIuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10
eXBlLW1lbWJlci5qc29uCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5
cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24KcmVuYW1lIHRvIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdW5rbm93bi10
eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJhdGUtZG9tYWlucy13aXRo
LWZlYXR1cmUtZ3VhcmRzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMu
anNvbgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJl
LWd1YXJkcy5qc29uCnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMu
anNvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9zYW1lLXR5cGUtaWQtZGlm
ZmVyZW50LWRvbWFpbi5qc29uCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2FtZS10eXBlLWlkLWRp
ZmZlcmVudC1kb21haW4uanNvbgpyZW5hbWUgdG8gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4u
anNvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2hhZG93ZWQtb3B0aW9u
YWwtdHlwZS1zZXR0ZXJzLmpzb24Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zaGFkb3dlZC1vcHRp
b25hbC10eXBlLXNldHRlcnMuanNvbgpyZW5hbWUgdG8gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0
ZXJzLmpzb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5
cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCnNpbWlsYXJpdHkgaW5k
ZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KcmVu
YW1lIHRvIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNv
bgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29u
CnJlbmFtZSB0byBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCnNpbWlsYXJp
dHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgpyZW5hbWUgdG8g
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlw
ZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5
cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgpzaW1pbGFyaXR5IGluZGV4
IDEwMCUKcmVuYW1lIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgpyZW5hbWUgdG8gU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCnNpbWlsYXJpdHkgaW5kZXggMTAw
JQpyZW5hbWUgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCnJlbmFtZSB0byBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLXJlcXVpcmlu
Zy1ydW50aW1lLWNhc3RzLmpzb24KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCAzOGU1YWY1Li40ZWUzY2Q3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTYtMTItMjEg
IEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
dGVhY2ggdGhlIHByb3RvY29sIGdlbmVyYXRvciBhYm91dCBwbGF0Zm9ybS1zcGVjaWZpYyB0eXBl
cywgZXZlbnRzLCBhbmQgY29tbWFuZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NjAwMworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjg3MTg5OTA+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVhY2gg
cnVuLWluc3BlY3Rvci1nZW5lcmF0b3ItdGVzdHMgdG8gZ2VuZXJhdGUgdGVzdCBvdXRwdXQgdXNp
bmcgdGhlIHBsYXRmb3JtIG5hbWUKKyAgICAgICAgZGVyaXZlZCBmcm9tIHRoZSBkaXJlY3Rvcnkg
dGhhdCB0aGUgdGVzdCBpcyBpbi4gRm9yIGV4YW1wbGUsIHRlc3RzIGluIHRoZSAvZ2VuZXJpYy8K
KyAgICAgICAgc3ViZGlyZWN0b3J5IHdpbGwgcGFzcyBgLS1wbGF0Zm9ybSBnZW5lcmljYCB0byBn
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkuCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2luc3BlY3Rvci9tYWluLnB5OgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJh
dG9yVGVzdHMuZ2VuZXJhdGVfZnJvbV9qc29uKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRv
clRlc3RzLnJ1bl90ZXN0cyk6CisgICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cy5tYWlu
KToKKwogMjAxNi0xMi0yMSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAg
ICAgICBXZWJBc3NlbWJseTogSW1wb3J0IHNwZWMgdGVzdHMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL21haW4ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2luc3BlY3Rvci9tYWluLnB5CmluZGV4IDIyNDRkNGMuLmE4ZmNmMmEgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL21haW4ucHkKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weQpAQCAtMzgsMTMgKzM4LDE0IEBAIGNsYXNzIElu
c3BlY3RvckdlbmVyYXRvclRlc3RzOgogICAgICAgICBzZWxmLnJlc2V0X3Jlc3VsdHMgPSByZXNl
dF9yZXN1bHRzCiAgICAgICAgIHNlbGYuZXhlY3V0aXZlID0gZXhlY3V0aXZlCiAKLSAgICBkZWYg
Z2VuZXJhdGVfZnJvbV9qc29uKHNlbGYsIGpzb25fZmlsZSwgb3V0cHV0X2RpcmVjdG9yeSk6Cisg
ICAgZGVmIGdlbmVyYXRlX2Zyb21fanNvbihzZWxmLCBqc29uX2ZpbGUsIHBsYXRmb3JtLCBvdXRw
dXRfZGlyZWN0b3J5KToKICAgICAgICAgY21kID0gWydweXRob24nLAogICAgICAgICAgICAgICAg
J0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weScsCiAgICAgICAgICAgICAgICAnLS1vdXRwdXREaXInLCBvdXRwdXRf
ZGlyZWN0b3J5LAogICAgICAgICAgICAgICAgJy0tZm9yY2UnLAogICAgICAgICAgICAgICAgJy0t
ZnJhbWV3b3JrJywgJ1Rlc3QnLAogICAgICAgICAgICAgICAgJy0tdGVzdCcsCisgICAgICAgICAg
ICAgICAnLS1wbGF0Zm9ybScsIHBsYXRmb3JtLAogICAgICAgICAgICAgICAganNvbl9maWxlXQog
CiAgICAgICAgIGV4aXRfY29kZSA9IDAKQEAgLTg3LDcgKzg4LDcgQEAgY2xhc3MgSW5zcGVjdG9y
R2VuZXJhdG9yVGVzdHM6CiAgICAgICAgICAgICAgICAgcHJpbnQgJ1BBU1M6ICVzJyAlIG91dHB1
dF9maWxlCiAgICAgICAgIHJldHVybiBjaGFuZ2VzX2ZvdW5kCiAKLSAgICBkZWYgcnVuX3Rlc3Rz
KHNlbGYsIGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAgZGVmIHJ1
bl90ZXN0cyhzZWxmLCBwbGF0Zm9ybSwgaW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0
b3J5KToKICAgICAgICAgd29ya19kaXJlY3RvcnkgPSByZWZlcmVuY2VfZGlyZWN0b3J5CiAKICAg
ICAgICAgcGFzc2VkID0gVHJ1ZQpAQCAtMTAwLDcgKzEwMSw3IEBAIGNsYXNzIEluc3BlY3Rvckdl
bmVyYXRvclRlc3RzOgogICAgICAgICAgICAgaWYgbm90IHNlbGYucmVzZXRfcmVzdWx0czoKICAg
ICAgICAgICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQogCi0gICAg
ICAgICAgICBpZiBzZWxmLmdlbmVyYXRlX2Zyb21fanNvbihvcy5wYXRoLmpvaW4oaW5wdXRfZGly
ZWN0b3J5LCBpbnB1dF9maWxlKSwgd29ya19kaXJlY3RvcnkpOgorICAgICAgICAgICAgaWYgc2Vs
Zi5nZW5lcmF0ZV9mcm9tX2pzb24ob3MucGF0aC5qb2luKGlucHV0X2RpcmVjdG9yeSwgaW5wdXRf
ZmlsZSksIHBsYXRmb3JtLCB3b3JrX2RpcmVjdG9yeSk6CiAgICAgICAgICAgICAgICAgcGFzc2Vk
ID0gRmFsc2UKIAogICAgICAgICAgICAgaWYgc2VsZi5yZXNldF9yZXN1bHRzOgpAQCAtMTIwLDEw
ICsxMjEsMjIgQEAgY2xhc3MgSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHM6CiAKICAgICAgICAgYWxs
X3Rlc3RzX3Bhc3NlZCA9IFRydWUKIAotICAgICAgICBpbnB1dF9kaXJlY3RvcnkgPSBvcy5wYXRo
LmpvaW4oJ0phdmFTY3JpcHRDb3JlJywgJ2luc3BlY3RvcicsICdzY3JpcHRzJywgJ3Rlc3RzJykK
LSAgICAgICAgcmVmZXJlbmNlX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbignSmF2YVNjcmlwdENv
cmUnLCAnaW5zcGVjdG9yJywgJ3NjcmlwdHMnLCAndGVzdHMnLCAnZXhwZWN0ZWQnKQotICAgICAg
ICBpZiBub3Qgc2VsZi5ydW5fdGVzdHMoaW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0
b3J5KToKLSAgICAgICAgICAgIGFsbF90ZXN0c19wYXNzZWQgPSBGYWxzZQorICAgICAgICBiYXNl
X2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbignSmF2YVNjcmlwdENvcmUnLCAnaW5zcGVjdG9yJywg
J3NjcmlwdHMnLCAndGVzdHMnKQorCisgICAgICAgIHBsYXRmb3JtX2RpcmVjdG9yaWVzID0gewor
ICAgICAgICAgICAgJ21hY29zJzogJ21hYycsCisgICAgICAgICAgICAnaW9zJzogJ2lvcycsCisg
ICAgICAgICAgICAnZ2VuZXJpYyc6ICdnZW5lcmljJywKKyAgICAgICAgICAgICdhbGwnOiAnYWxs
JywKKyAgICAgICAgfQorCisgICAgICAgIGZvciBwbGF0Zm9ybV9uYW1lLCBwbGF0Zm9ybV9kaXJl
Y3RvcnkgaW4gcGxhdGZvcm1fZGlyZWN0b3JpZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBp
bnB1dF9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oYmFzZV9kaXJlY3RvcnksIHBsYXRmb3JtX2Rp
cmVjdG9yeSkKKyAgICAgICAgICAgIHJlZmVyZW5jZV9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4o
aW5wdXRfZGlyZWN0b3J5LCAnZXhwZWN0ZWQnKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGgu
aXNkaXIoaW5wdXRfZGlyZWN0b3J5KSBvciBub3Qgb3MucGF0aC5pc2RpcihpbnB1dF9kaXJlY3Rv
cnkpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGFsbF90ZXN0c19w
YXNzZWQgPSBhbGxfdGVzdHNfcGFzc2VkIGFuZCBzZWxmLnJ1bl90ZXN0cyhwbGF0Zm9ybV9uYW1l
LCBpbnB1dF9kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpCiAKICAgICAgICAgcHJpbnQg
JycKICAgICAgICAgaWYgYWxsX3Rlc3RzX3Bhc3NlZDoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297661</attachid>
            <date>2016-12-22 11:33:44 -0800</date>
            <delta_ts>2016-12-22 11:33:44 -0800</delta_ts>
            <desc>[PATCH 1/3 v2] Add --platform argument</desc>
            <filename>bug-166003-20161222113239.patch</filename>
            <type>text/plain</type>
            <size>37139</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwMTAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NWY1NzI1MmZmZmQzOTRmY2NmZDVhYjA4ZTdiZTMxZDJlNWE1ZmEzLi4zZmQ4ZWQ3MTZmYzYxNTE5
ZTQyOGUyMGY1OTA0YTkxODljMGI2NGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NSBAQAorMjAxNi0xMi0xNyAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiB0ZWFjaCB0aGUgcHJvdG9jb2wgZ2VuZXJhdG9yIGFib3V0
IHBsYXRmb3JtLXNwZWNpZmljIHR5cGVzLCBldmVudHMsIGFuZCBjb21tYW5kcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDAzCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8yODcxODk5MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgYSAtLXBsYXRmb3JtIGFyZ3VtZW50IHRvIGdlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSBhbmQgcHJvcGFnYXRlCisgICAgICAgIHRoZSBz
cGVjaWZpZWQgcGxhdGZvcm0gdG8gZWFjaCBnZW5lcmF0b3IuIFRoaXMgd2lsbCBiZSB1c2VkIGlu
IHRoZSBuZXh0IGZldyBwYXRjaGVzCisgICAgICAgIHRvIGV4Y2x1ZGUgdHlwZXMsIGV2ZW50cywg
YW5kIGNvbW1hbmRzIHRoYXQgYXJlIHVuc3VwcG9ydGVkIGJ5IHRoZSBiYWNrZW5kIHBsYXRmb3Jt
LgorCisgICAgICAgIENvdmVydCBhbGwgc3ViY2xhc3NlcyBvZiBHZW5lcmF0b3IgdG8gcGFzcyBh
bG9uZyB0aGVpciBwb3NpdGlvbmFsIGFyZ3VtZW50cyBzbyB0aGF0IHdlCisgICAgICAgIGNhbiBl
YXNpbHkgY2hhbmdlIGJhc2UgY2xhc3MgYXJndW1lbnRzIHdpdGhvdXQgZWRpdGluZyBhbGwgZ2Vu
ZXJhdG9yIGNvbnN0cnVjdG9ycy4KKworICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vY3BwX2dlbmVyYXRvci5weToKKyAgICAgICAgKENwcEdlbmVyYXRvci5fX2luaXRfXyk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRl
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAgIChDcHBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9faW5p
dF9fKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9i
YWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChDcHBCYWNrZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVy
X2hlYWRlci5weToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5fX2luaXRfXyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENw
cEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90
eXBlc19oZWFkZXIucHk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9y
Ll9faW5pdF9fKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENwcFByb3Rv
Y29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5Ogor
ICAgICAgICAoSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5OgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJh
dG9yLl9faW5pdF9fKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAo
T2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRp
b25faGVhZGVyLnB5OgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25IZWFkZXJHZW5lcmF0b3Iu
X19pbml0X18pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0JhY2tl
bmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaGVhZGVyLnB5OgorICAgICAgICAoT2JqQ0hlYWRl
ckdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weToKKyAgICAgICAgKE9iakNJbnRlcm5h
bEhlYWRlckdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5
OgorICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSGVhZGVyR2VuZXJhdG9yLl9f
aW5pdF9fKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAg
KE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5p
dF9fKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
cHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChPYmpDUHJvdG9jb2xU
eXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgUGFzcyBhbG9u
ZyAqYXJncyBpbnN0ZWFkIG9mIHNpbmdsZSBwb3NpdGlvbmFsIGFyZ3VtZW50cy4KKworICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5OgorICAgICAgICAoR2Vu
ZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgU2F2ZSB0aGUgdGFyZ2V0IHBsYXRmb3JtIGFuZCBh
ZGQgYSBnZXR0ZXIuCisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVs
cy5weToKKyAgICAgICAgKFBsYXRmb3JtKToKKyAgICAgICAgKFBsYXRmb3JtLl9faW5pdF9fKToK
KyAgICAgICAgKFBsYXRmb3JtLmZyb21TdHJpbmcpOgorICAgICAgICAoUGxhdGZvcm1zKToKKyAg
ICAgICAgRGVmaW5lIHRoZSBhbGxvd2VkIFBsYXRmb3JtIGluc3RhbmNlcyAoaU9TLCBtYWNPUywg
YW5kIEFueSkuCisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2Vu
ZXJhdG9yLnB5OgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5hbmQuX19pbml0X18pOgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weToKKyAgICAgICAgKGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbik6CisgICAgICAgIFBh
c3MgYWxvbmcgKmFyZ3MgaW5zdGVhZCBvZiBzaW5nbGUgcG9zaXRpb25hbCBhcmd1bWVudHMuCisK
IDIwMTYtMTItMjIgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAg
V2ViQXNzZW1ibHk6IE1ha2UgdGhlIHNwZWMtdGVzdHMvc3RhcnQud2FzdC5qcyB0ZXN0IHBhc3MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2NwcF9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5CmluZGV4IDZiYjY2ZmQ1MmY1ZTZjMmJhMDJm
ZWVlMDA5MjE1ZmVhZjhiMDI1MTUuLmM0NTlmY2FjM2FmNzA0OTJkNmEzMGYzN2JkZGVmZjFhZGE2
ZjY3ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weQpAQCAtNDQsOCArNDQsOCBA
QCBfUFJJTUlUSVZFX1RPX0NQUF9OQU1FX01BUCA9IHsKIH0KIAogY2xhc3MgQ3BwR2VuZXJhdG9y
KEdlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0
aCk6Ci0gICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBh
dGgpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIEdl
bmVyYXRvci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgcHJvdG9j
b2xfbmFtZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0
dGluZygnY3BwX3Byb3RvY29sX2dyb3VwJywgJycpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRl
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggMjk3NTYxNWU2YjAzYjU1YTE5ODRmOGQxMzE1MmQ2OTU1
MzgzNjY3Yi4uM2FiMTYzMDE4NDNlZTA0MWM0NTI1MDFhNDJiNmY3ODMyNGJhYWI3MiAxMDA3NTUK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtMzcsOCArMzcsOCBA
QCBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIAogCiBjbGFzcyBDcHBBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBDcHBHZW5l
cmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBDcHBHZW5lcmF0b3IuX19pbml0
X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxm
KToKICAgICAgICAgcmV0dXJuICclc0FsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oJyAlIHNl
bGYucHJvdG9jb2xfbmFtZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hl
YWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4IDg1MDNmNmJi
NmRmYTRiNzQwNDc4OGJhNzJjYTljZmExYTIzZDJiNzUuLmEzNTc5YWMzZWUwNmVhOTFkODVjZjU4
NDliOWQ2ZGRkMTBlMTE1NDEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0zOSw4ICsz
OSw4IEBAIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCiAKIGNsYXNzIENwcEJh
Y2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6Ci0gICAgZGVmIF9f
aW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIENwcEdlbmVyYXRv
ci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIENwcEdlbmVyYXRvci5fX2luaXRfXyhz
ZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgog
ICAgICAgICByZXR1cm4gIiVzQmFja2VuZERpc3BhdGNoZXJzLmgiICUgc2VsZi5wcm90b2NvbF9u
YW1lKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDlhZWNj
NGJjYTkyZjJkZGY4Y2ZjNDc3NWZhODAyZmQ5ZGM4MWQyNjcuLjk4OWM1YTNiYTUyN2I3MzFjN2Vi
NjM3OTQyMGUxZGRhY2U1MDAwYjggMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weQpAQCAtMzgsOCArMzgsOCBAQCBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFs
JykKIAogCiBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
KENwcEdlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxl
cGF0aCk6Ci0gICAgICAgIENwcEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRf
ZmlsZXBhdGgpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAg
ICAgIENwcEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBk
ZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gIiVzQmFja2VuZERpc3Bh
dGNoZXJzLmNwcCIgJSBzZWxmLnByb3RvY29sX25hbWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5CmluZGV4IGY1OWI5ODRlZDcyZmI3NGE2MzAyZTBlNWJhYmNiOTI2YmZlMmU5MDguLjAxNWQ1
N2UyNTI1ZDVkNzEzMjBlMzE0ZTU5N2Q3ZGQzZTFkYzgwYmMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9u
dGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkKQEAgLTM5LDggKzM5LDggQEAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2Jh
bCcpCiAKIAogY2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdl
bmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6
Ci0gICAgICAgIENwcEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBh
dGgpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIENw
cEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgb3V0
cHV0X2ZpbGVuYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gIiVzRnJvbnRlbmREaXNwYXRjaGVy
cy5oIiAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uLnB5CmluZGV4IDcxNjcyYzQ2YzEwOWQ3NTkyNGM2OWEwYjZiNTM1MmM2ZDdiMDNk
YzIuLjgyNjljOWNmOTI3Nzg2YjNjMmVkYWIwYTJkNjJmZTVjNDUwODExOTMgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9u
dGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0zOCw4ICszOCw4IEBAIGxvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCiAKIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5p
dF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIENwcEdlbmVyYXRvci5f
X2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIENwcEdlbmVyYXRvci5fX2luaXRfXyhzZWxm
LCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgogICAg
ICAgICByZXR1cm4gIiVzRnJvbnRlbmREaXNwYXRjaGVycy5jcHAiICUgc2VsZi5wcm90b2NvbF9u
YW1lKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJv
dG9jb2xfdHlwZXNfaGVhZGVyLnB5CmluZGV4IDA3MDRiM2UxZTBkMWRiYjUyODNhYjdiNmFmNjE0
YjExOTIwYjgxNjUuLmYxY2I4OGRhZWJjMDExZWI1NjU3YjE5ODUwMjU1M2I3NGEzYzkwMjkgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29s
X3R5cGVzX2hlYWRlci5weQpAQCAtNDAsOCArNDAsOCBAQCBsb2cgPSBsb2dnaW5nLmdldExvZ2dl
cignZ2xvYmFsJykKIAogCiBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENw
cEdlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0
aCk6Ci0gICAgICAgIENwcEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmls
ZXBhdGgpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAg
IENwcEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYg
b3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gIiVzUHJvdG9jb2xPYmplY3Rz
LmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBl
c19pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5w
eQppbmRleCA3YmJiOTAzMjdjNDZiOGI4YjQ2YmIwNjExZmM2Njg0ZGFmNDk5YmM2Li4zMzU0ZTA0
OWFjOTBiZTUxZTY5ZTMyODRjNzU3NGMyOWFmYmJhZjkxIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9j
b2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxl
bWVudGF0aW9uLnB5CkBAIC0zOSw4ICszOSw4IEBAIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdn
bG9iYWwnKQogCiAKIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
cihDcHBHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmls
ZXBhdGgpOgotICAgICAgICBDcHBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0
X2ZpbGVwYXRoKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAg
ICAgICBDcHBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQogCiAgICAg
ZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKICAgICAgICAgcmV0dXJuICIlc1Byb3RvY29sT2Jq
ZWN0cy5jcHAiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRf
Y29tbWFuZHMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5CmluZGV4IDMzOTJjNzg0NTkzYzkx
NDdjYmY4NDU2N2E4MTc1ODBjN2Y5NmNiMWQuLmE0YjU3Yjg0Y2I0NDRkZTFjNWMxZGJjMDEwNTYw
MDM1NmE2ZGJkZGIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNf
YmFja2VuZF9jb21tYW5kcy5weQpAQCAtMzcsOCArMzcsOCBAQCBsb2cgPSBsb2dnaW5nLmdldExv
Z2dlcignZ2xvYmFsJykKIAogCiBjbGFzcyBKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihHZW5l
cmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgot
ICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBHZW5lcmF0
b3IuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQogCiAgICAgZGVmIG91dHB1dF9maWxl
bmFtZShzZWxmKToKICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggYTU1MmI0NmYyOWYzNTU2NjEwMDk3NTZk
NzE3YjFhNjE0N2EwYTIzYS4uNzBlNTM0MjNjOGM0ODllODIzN2JiMTIwNTRjN2JlODIwMTBhMGIz
NSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtNDAsOCArNDAsOCBAQCBsb2cgPSBs
b2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIAogCiBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYs
IG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIE9iakNHZW5lcmF0b3IuX19pbml0X18o
c2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJn
cywgKiprd2FyZ3MpOgorICAgICAgICBPYmpDR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsICphcmdz
LCAqKmt3YXJncykKIAogICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CiAgICAgICAgIHJl
dHVybiAnJXNCYWNrZW5kRGlzcGF0Y2hlcnMuaCcgJSBzZWxmLnByb3RvY29sX25hbWUoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpj
X2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCA5ZDVmMDM5MWU1YTVl
MmVhYmQyOTE1ZjFlMDZmMGIwZTExZTVkOWMwLi4wZjQ2ZGU0NDBmYjlmZjAxOGNkYzEzMTNkZjMy
NTJlMWRlZmNhODM3IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eQpAQCAtNDAsOCArNDAsOCBAQCBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIAog
CiBjbGFzcyBPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5l
cmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgot
ICAgICAgICBPYmpDR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0
aCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgT2Jq
Q0dlbmVyYXRvci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgb3V0
cHV0X2ZpbGVuYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gJyVzQmFja2VuZERpc3BhdGNoZXJz
Lm1tJyAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRp
b25faGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hlYWRlci5weQppbmRleCA1ZTljOWUw
MDA4MzgyOTY1M2M3MmQxZDIyN2ViNGQyYTA5OGUzM2NiLi4yMmQyYzQyMTc3NjQwZGNlOTVkNWI2
M2JjNTU1Yzc2NTQyZjE2N2Q4IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVy
LnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9oZWFkZXIucHkKQEAgLTM3LDggKzM3LDggQEAg
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKIAogY2xhc3MgT2JqQ0NvbmZpZ3Vy
YXRpb25IZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIE9iakNHZW5lcmF0b3IuX19pbml0
X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAq
YXJncywgKiprd2FyZ3MpOgorICAgICAgICBPYmpDR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsICph
cmdzLCAqKmt3YXJncykKIAogICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CiAgICAgICAg
IHJldHVybiAnJXNDb25maWd1cmF0aW9uLmgnICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmln
dXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCAyYTQ4MjJkZmMyZTcxZGJmMTVlZmU4MjY2
ZjIwMTM1YzQ3OWZlNTQwLi45YjUwNjkwN2Q2YTMzYzk4YTUyNmIwODQ3Y2M1Yzg5OWI5ZjE5NDVi
IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb24ucHkKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0zNyw4ICszNyw4IEBAIGxv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCiAKIGNsYXNzIE9iakNCYWNrZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBPYmpDR2VuZXJh
dG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgT2JqQ0dlbmVyYXRvci5fX2luaXRf
XyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYp
OgogICAgICAgICByZXR1cm4gJyVzQ29uZmlndXJhdGlvbi5tbScgJSBzZWxmLnByb3RvY29sX25h
bWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDE0
MDdhNjBhYjY4NzAyNTcyODFlODBhNWMwMWY2ZGYyMmVkM2ViNWEuLjhkNzI5YzMwMDQ5MzU0MTAx
MzQ2MTljZjVkZjNhYmI4NmZiZThjZTEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHkKQEAgLTM4LDggKzM4LDggQEAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIo
J2dsb2JhbCcpCiAKIAogY2xhc3MgT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwg
aW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBPYmpDR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1v
ZGVsLCBpbnB1dF9maWxlcGF0aCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dh
cmdzKToKKyAgICAgICAgT2JqQ0dlbmVyYXRvci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2Fy
Z3MpCiAKICAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gJyVz
RXZlbnREaXNwYXRjaGVycy5tbScgJSBzZWxmLnByb3RvY29sX25hbWUoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqY19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weQppbmRleCBmNWJhN2FiYWZiMTMxNGM3Y2Q4
YWIyODhkMDE3NmNmMzJkZDJhYmMzLi5iZDhmMDVkZGZiZjg2Nzk1YTI2ZjU4NDAzNmQ4NGM0Yzcz
Y2QwMzljIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weQpA
QCAtNDQsOCArNDQsOCBAQCBkZWYgYWRkX25ld2xpbmUobGluZXMpOgogCiAKIGNsYXNzIE9iakNI
ZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1v
ZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIE9iakNHZW5lcmF0b3IuX19pbml0X18oc2Vs
ZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywg
Kiprd2FyZ3MpOgorICAgICAgICBPYmpDR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsICphcmdzLCAq
Kmt3YXJncykKIAogICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CiAgICAgICAgIHJldHVy
biAnJXMuaCcgJSBzZWxmLnByb3RvY29sX25hbWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19pbnRlcm5h
bF9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weQppbmRleCA0NzAwNmNmYzVkYmY3
ZjEzMjczNDdiMmUyMTc3NWFiMmIyNmNiNGMxLi43NzQ4OGY2ZDU0MGZlMDNiMzkxODg1MGY2ZTI2
NmNhMzYzOGY5YjNjIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weQorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9v
YmpjX2ludGVybmFsX2hlYWRlci5weQpAQCAtMzcsOCArMzcsOCBAQCBsb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcignZ2xvYmFsJykKIAogCiBjbGFzcyBPYmpDSW50ZXJuYWxIZWFkZXJHZW5lcmF0b3Io
T2JqQ0dlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxl
cGF0aCk6Ci0gICAgICAgIE9iakNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0
X2ZpbGVwYXRoKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAg
ICAgICBPYmpDR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKIAogICAg
IGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiAnJXNJbnRlcm5hbC5o
JyAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVf
Y29udmVyc2lvbnNfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hl
YWRlci5weQppbmRleCA1NWRhYmY0NmU5ZTUzZTUyZjNiZTQ5ZWY2ZGZmOWFkMDA1N2MyZmE4Li44
YzM4M2QxZTkxNGE0MjBjNWRiMzc1MWRhZDliNDY5Yjc1ZGU5NDRlIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpj
X3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xf
dHlwZV9jb252ZXJzaW9uc19oZWFkZXIucHkKQEAgLTQ0LDggKzQ0LDggQEAgZGVmIGFkZF9uZXds
aW5lKGxpbmVzKToKIAogCiBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNIZWFkZXJH
ZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBp
bnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIE9iakNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9k
ZWwsIGlucHV0X2ZpbGVwYXRoKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2Fy
Z3MpOgorICAgICAgICBPYmpDR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJn
cykKIAogICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiAnJXNU
eXBlQ29udmVyc2lvbnMuaCcgJSBzZWxmLnByb3RvY29sX25hbWUoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90
b2NvbF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDk3MjJhYTRhZWNl
NDExMWJkOWJmMTEyNTliMTI1ODFhNzAyMmQzNDAuLmJhZGRjZjNjZDRjOWEzZjdmYjNjY2VhODcx
ZDkzOTdkYzYyZTY4OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9u
c19pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNf
aW1wbGVtZW50YXRpb24ucHkKQEAgLTQzLDggKzQzLDggQEAgZGVmIGFkZF9uZXdsaW5lKGxpbmVz
KToKIAogCiBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvcihPYmpDR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlu
cHV0X2ZpbGVwYXRoKToKLSAgICAgICAgT2JqQ0dlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2Rl
bCwgaW5wdXRfZmlsZXBhdGgpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJn
cyk6CisgICAgICAgIE9iakNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdz
KQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKICAgICAgICAgcmV0dXJuICclc1R5
cGVDb252ZXJzaW9ucy5tbScgJSBzZWxmLnByb3RvY29sX25hbWUoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNf
aW1wbGVtZW50YXRpb24ucHkKaW5kZXggMzY2M2Q2ZDhlM2Q3NDQ4N2M2YzY1NjNiYjBmZmRiNjU4
NDI2OWEyYi4uYmEwZTJlZTllNjQ1OTk2NjJkNzQ1NmNiNTM0M2E4ODY5YzAyZmM1NyAxMDA3NTUK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3By
b3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CkBAIC00NCw4ICs0NCw4IEBAIGRlZiBhZGRf
bmV3bGluZShsaW5lcyk6CiAKIAogY2xhc3MgT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWws
IGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAgT2JqQ0dlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBt
b2RlbCwgaW5wdXRfZmlsZXBhdGgpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3
YXJncyk6CisgICAgICAgIE9iakNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dh
cmdzKQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKICAgICAgICAgcmV0dXJuICcl
c1R5cGVzLm1tJyAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkK
aW5kZXggODU1MDI3Mjk3ZTVlZThiMGRlYzdjNzg5MDIwMDZmMGI1NjE4MDM1My4uYjA5NmVmNTBm
OGQ5ZjY3ZmZiNmY1YmEwMTdiYjY2N2M1ZTc1Y2UwZCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5w
eQpAQCAtNzYsMTQgKzc2LDE4IEBAIF9UWVBFU19XSVRIX09QRU5fRklFTERTID0gc2V0KFsKIAog
CiBjbGFzcyBHZW5lcmF0b3I6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9m
aWxlcGF0aCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBwbGF0Zm9ybSwgaW5wdXRf
ZmlsZXBhdGgpOgogICAgICAgICBzZWxmLl9tb2RlbCA9IG1vZGVsCisgICAgICAgIHNlbGYuX3Bs
YXRmb3JtID0gcGxhdGZvcm0KICAgICAgICAgc2VsZi5faW5wdXRfZmlsZXBhdGggPSBpbnB1dF9m
aWxlcGF0aAogICAgICAgICBzZWxmLl9zZXR0aW5ncyA9IHt9CiAKICAgICBkZWYgbW9kZWwoc2Vs
Zik6CiAgICAgICAgIHJldHVybiBzZWxmLl9tb2RlbAogCisgICAgZGVmIHBsYXRmb3JtKHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5fcGxhdGZvcm0KKwogICAgIGRlZiBzZXRfZ2VuZXJhdG9y
X3NldHRpbmcoc2VsZiwga2V5LCB2YWx1ZSk6CiAgICAgICAgIHNlbGYuX3NldHRpbmdzW2tleV0g
PSB2YWx1ZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9tb2RlbHMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkKaW5kZXggNzE0NGE5ODMyNzhkNjEyYjk0MTU1OTFk
MTkwM2Q1YTM0ZWZjZTVjOC4uNjc4MDYwZTI3MGE2MjI0ZDgzYTRkNDc4ZmU4Y2M3YTk3NTllYmQw
MSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vbW9kZWxzLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL21vZGVscy5weQpAQCAtMTA5LDYgKzEwOSwzNSBAQCBjbGFzcyBGcmFtZXdv
cmtzOgogICAgIFRlc3QgPSBGcmFtZXdvcmsoIlRlc3QiKQogCiAKK2NsYXNzIFBsYXRmb3JtOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQor
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBmcm9tU3RyaW5nKHBsYXRmb3JtU3RyaW5nKToK
KyAgICAgICAgcGxhdGZvcm1TdHJpbmcgPSBwbGF0Zm9ybVN0cmluZy5sb3dlcigpCisgICAgICAg
IGlmIHBsYXRmb3JtU3RyaW5nID09ICJpb3MiOgorICAgICAgICAgICAgcmV0dXJuIFBsYXRmb3Jt
cy5pT1MKKworICAgICAgICBpZiBwbGF0Zm9ybVN0cmluZyA9PSAibWFjb3MiOgorICAgICAgICAg
ICAgcmV0dXJuIFBsYXRmb3Jtcy5tYWNPUworCisgICAgICAgIGlmIHBsYXRmb3JtU3RyaW5nID09
ICJhbGwiOgorICAgICAgICAgICAgcmV0dXJuIFBsYXRmb3Jtcy5BbGwKKworICAgICAgICBpZiBw
bGF0Zm9ybVN0cmluZyA9PSAiZ2VuZXJpYyIgb3Igbm90IHBsYXRmb3JtU3RyaW5nOgorICAgICAg
ICAgICAgcmV0dXJuIFBsYXRmb3Jtcy5HZW5lcmljCisKKyAgICAgICAgcmFpc2UgUGFyc2VFeGNl
cHRpb24oIlVua25vd24gcGxhdGZvcm06ICVzIiAlIHBsYXRmb3JtU3RyaW5nKQorCisKK2NsYXNz
IFBsYXRmb3JtczoKKyAgICBBbGwgPSBQbGF0Zm9ybSgiQWxsIikKKyAgICBHZW5lcmljID0gUGxh
dGZvcm0oImdlbmVyaWMiKQorICAgIGlPUyA9IFBsYXRmb3JtKCJpT1MiKQorICAgIG1hY09TID0g
UGxhdGZvcm0oIm1hY09TIikKKworCiBjbGFzcyBUeXBlUmVmZXJlbmNlOgogICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCB0eXBlX2tpbmQsIHJlZmVyZW5jZWRfdHlwZV9uYW1lLCBlbnVtX3ZhbHVlcywg
YXJyYXlfaXRlbXMpOgogICAgICAgICBzZWxmLnR5cGVfa2luZCA9IHR5cGVfa2luZApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2Jq
Y19nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9vYmpjX2dlbmVyYXRvci5weQppbmRleCBjYWQ4NzJkMTAxNzFlNjdmZjk3MTg2ZDBl
MmE1ZWVkNjAyY2IwMGNlLi43OWMwNWY0OTMzODI3NTAzNmIzMjllNWQ5ZTM5YWMxYTliZjNjZjEx
IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9vYmpjX2dlbmVyYXRvci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvci5weQpAQCAtODksOCArODksOCBAQCBj
bGFzcyBPYmpDR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgT0JKQ19TSEFSRURfUFJFRklYID0g
J1Byb3RvY29sJwogICAgIE9CSkNfU1RBVElDX1BSRUZJWCA9ICclcyVzJyAlIChPQkpDX0hFTFBF
Ul9QUkVGSVgsIE9CSkNfU0hBUkVEX1BSRUZJWCkKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBt
b2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwg
bW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKipr
d2FyZ3MpOgorICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdz
KQogCiAgICAgIyBUaGUgJ3Byb3RvY29sIG5hbWUnIGlzIHVzZWQgdG8gcHJlZml4IGZpbGVuYW1l
cyBmb3IgYSBwcm90b2NvbCBncm91cCAoYSBzZXQgb2YgZG9tYWlucyBnZW5lcmF0ZWQgdG9nZXRo
ZXIpLgogICAgIGRlZiBwcm90b2NvbF9uYW1lKHNlbGYpOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKaW5kZXggNGFmMDc4N2QwMTc1
Y2Q5NTZhZDMxMTFmNGMzMDIwZmQ2ODQxNzgzYi4uZTM5YTYwNGZjNTlkMWVhODA0ZDkxMDgyNWQ3
ODVkMmNjMTliODZkZCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CkBAIC0xLDYgKzEsNiBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCiAjCi0jIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTE0LDYgKzExNCw3IEBAIGRl
ZiBnZW5lcmF0ZV9mcm9tX3NwZWNpZmljYXRpb24ocHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVw
YXRoPU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXJwYXRo
PU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlX291dHB1dD1GYWxz
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWV3b3JrX25hbWU9IiIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtX25hbWU9IiIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlX2Zyb250ZW5kPVRydWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlX2JhY2tlbmQ9VHJ1ZSk6CiAKQEAgLTEy
NSw2ICsxMjYsNyBAQCBkZWYgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3Bl
Y2lmaWNhdGlvbl9maWxlcGF0aD1Ob25lLAogICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBl
OgogICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFcnJvciBwYXJzaW5nIHZhbGlkIEpTT04g
aW4gZmlsZTogIiArIGZpbGVwYXRoICsgIlxuUGFyc2UgZXJyb3I6ICIgKyBzdHIoZSkpCiAKKyAg
ICBwbGF0Zm9ybSA9IFBsYXRmb3JtLmZyb21TdHJpbmcocGxhdGZvcm1fbmFtZSkKICAgICBwcm90
b2NvbCA9IG1vZGVscy5Qcm90b2NvbChmcmFtZXdvcmtfbmFtZSkKICAgICBmb3Igc3BlY2lmaWNh
dGlvbiBpbiBzdXBwbGVtZW50YWxfc3BlY2lmaWNhdGlvbl9maWxlcGF0aHM6CiAgICAgICAgIGxv
YWRfc3BlY2lmaWNhdGlvbihwcm90b2NvbCwgc3BlY2lmaWNhdGlvbiwgaXNTdXBwbGVtZW50YWw9
VHJ1ZSkKQEAgLTEzMiw1OSArMTM0LDYxIEBAIGRlZiBnZW5lcmF0ZV9mcm9tX3NwZWNpZmljYXRp
b24ocHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoPU5vbmUsCiAKICAgICBwcm90b2NvbC5y
ZXNvbHZlX3R5cGVzKCkKIAorICAgIGdlbmVyYXRvcl9hcmd1bWVudHMgPSBbcHJvdG9jb2wsIHBs
YXRmb3JtLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGhdCiAgICAgZ2VuZXJhdG9ycyA9
IFtdCisKICAgICBpZiBwcm90b2NvbC5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5UZXN0OgotICAg
ICAgICBnZW5lcmF0b3JzLmFwcGVuZChKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihwcm90b2Nv
bCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5h
cHBlbmQoQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9j
b2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMu
YXBwZW5kKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmlt
YXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChD
cHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmlt
YXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChD
cHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3Bl
Y2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcEZyb250
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3Nw
ZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBQcm90
b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25f
ZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBQcm90b2NvbFR5cGVzSW1w
bGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxl
cGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkK
LSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50
YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkp
Ci0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNDb25maWd1cmF0aW9uSGVhZGVyR2VuZXJh
dG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBn
ZW5lcmF0b3JzLmFwcGVuZChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9y
KHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5l
cmF0b3JzLmFwcGVuZChPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdl
bmVyYXRvcnMuYXBwZW5kKE9iakNIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3Bl
Y2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNJbnRl
cm5hbEhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVw
YXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNp
b25zSGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBh
dGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lv
bnNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9u
X2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ1Byb3RvY29sVHlwZXNJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2Zp
bGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoSlNCYWNrZW5kQ29tbWFuZHNHZW5l
cmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChD
cHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcigqZ2VuZXJhdG9yX2Fy
Z3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9y
cy5hcHBlbmQoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcigqZ2Vu
ZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcEZyb250ZW5k
RGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAg
IGdlbmVyYXRvcnMuYXBwZW5kKENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQo
Q3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisg
ICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5k
KE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50
cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJh
dG9ycy5hcHBlbmQoT2JqQ0NvbmZpZ3VyYXRpb25IZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9h
cmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDQ29uZmlndXJhdGlvbklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2Vu
ZXJhdG9ycy5hcHBlbmQoT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2Jq
Q0hlYWRlckdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRv
cnMuYXBwZW5kKE9iakNJbnRlcm5hbEhlYWRlckdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50
cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9u
c0hlYWRlckdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRv
cnMuYXBwZW5kKE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJh
dG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2Jq
Q1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50
cykpCiAKICAgICBlbGlmIHByb3RvY29sLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLkphdmFTY3Jp
cHRDb3JlOgotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChKU0JhY2tlbmRDb21tYW5kc0dlbmVy
YXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAg
Z2VuZXJhdG9ycy5hcHBlbmQoQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAg
IGdlbmVyYXRvcnMuYXBwZW5kKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKHBy
b3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0
b3JzLmFwcGVuZChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHBy
b3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0
b3JzLmFwcGVuZChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2ws
IHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBw
ZW5kKENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29s
LCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFw
cGVuZChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3Nw
ZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBQcm90
b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lm
aWNhdGlvbl9maWxlcGF0aCkpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEpTQmFja2VuZENv
bW1hbmRzR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9y
cy5hcHBlbmQoQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoKmdl
bmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBCYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAg
IGdlbmVyYXRvcnMuYXBwZW5kKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChD
cHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMp
KQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRv
cnMuYXBwZW5kKENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1
bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBQcm90b2NvbFR5cGVzSW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQogCiAgICAgZWxpZiBwcm90
b2NvbC5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5XZWJLaXQgYW5kIGdlbmVyYXRlX2JhY2tlbmQ6
Ci0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAg
ICBnZW5lcmF0b3JzLmFwcGVuZChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAg
ICBnZW5lcmF0b3JzLmFwcGVuZChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKHByb3Rv
Y29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3Jz
LmFwcGVuZChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2ws
IHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgICAgIGdlbmVyYXRvcnMuYXBw
ZW5kKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1l
bnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVy
YXRvcnMuYXBwZW5kKENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9h
cmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBQcm90b2NvbFR5cGVzSW1w
bGVtZW50YXRpb25HZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQogCiAgICAgZWxpZiBw
cm90b2NvbC5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5XZWJLaXQgYW5kIGdlbmVyYXRlX2Zyb250
ZW5kOgotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDSGVhZGVyR2VuZXJhdG9yKHByb3Rv
Y29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3Jz
LmFwcGVuZChPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNIZWFkZXJHZW5lcmF0b3IocHJvdG9j
b2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMu
YXBwZW5kKE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9y
KHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5l
cmF0b3JzLmFwcGVuZChPYmpDUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHBy
b3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0
b3JzLmFwcGVuZChPYmpDSGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAg
ICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSGVhZGVy
R2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBl
bmQoT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoKmdl
bmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDUHJvdG9j
b2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKIAog
ICAgIGVsaWYgcHJvdG9jb2wuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuV2ViSW5zcGVjdG9yOgot
ICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAg
IGdlbmVyYXRvcnMuYXBwZW5kKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAg
ICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDQ29uZmlndXJhdGlvbkhlYWRlckdlbmVyYXRvcihwcm90
b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9y
cy5hcHBlbmQoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2Nv
bCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5h
cHBlbmQoT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3Rv
Y29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3Jz
LmFwcGVuZChPYmpDSGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRp
b25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDSW50ZXJuYWxIZWFk
ZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0g
ICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0hlYWRl
ckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAg
ICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAg
ICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9y
KCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0Jh
Y2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVu
dHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDQ29uZmlndXJhdGlvbkhlYWRlckdl
bmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5k
KE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1
bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDRnJvbnRlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBn
ZW5lcmF0b3JzLmFwcGVuZChPYmpDSGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRz
KSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0ludGVybmFsSGVhZGVyR2VuZXJhdG9y
KCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ1By
b3RvY29sVHlwZUNvbnZlcnNpb25zSGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRz
KSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCiAKICAgICBzaW5nbGVfb3V0cHV0
X2ZpbGVfY29udGVudHMgPSBbXQogCkBAIC0yMTYsNiArMjIwLDcgQEAgZGVmIGdlbmVyYXRlX2Zy
b21fc3BlY2lmaWNhdGlvbihwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGg9Tm9uZSwKIAog
aWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBhbGxvd2VkX2ZyYW1ld29ya19uYW1lcyA9
IFsnSmF2YVNjcmlwdENvcmUnLCAnV2ViSW5zcGVjdG9yJywgJ1dlYktpdCcsICdUZXN0J10KKyAg
ICBhbGxvd2VkX3BsYXRmb3JtX25hbWVzID0gWydpT1MnLCAnbWFjT1MnLCAnYWxsJywgJ2dlbmVy
aWMnXQogICAgIGNsaV9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9InVzYWdl
OiAlcHJvZyBbb3B0aW9uc10gUHJpbWFyeVByb3RvY29sLmpzb24gW1N1cHBsZW1lbnRhbFByb3Rv
Y29sLmpzb24gLi4uXSIpCiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItbyIsICItLW91dHB1
dERpciIsIGhlbHA9IkRpcmVjdG9yeSB3aGVyZSBnZW5lcmF0ZWQgZmlsZXMgc2hvdWxkIGJlIHdy
aXR0ZW4uIikKICAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0tZnJhbWV3b3JrIiwgdHlwZT0i
Y2hvaWNlIiwgY2hvaWNlcz1hbGxvd2VkX2ZyYW1ld29ya19uYW1lcywgaGVscD0iVGhlIGZyYW1l
d29yayB0aGF0IHRoZSBwcmltYXJ5IHNwZWNpZmljYXRpb24gYmVsb25ncyB0by4iKQpAQCAtMjI0
LDYgKzIyOSw3IEBAIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgY2xpX3BhcnNlci5h
ZGRfb3B0aW9uKCItdCIsICItLXRlc3QiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJFbmFi
bGUgdGVzdCBtb2RlLiBVc2UgdW5pcXVlIG91dHB1dCBmaWxlbmFtZXMgY3JlYXRlZCBieSBwcmVw
ZW5kaW5nIHRoZSBpbnB1dCBmaWxlbmFtZS4iKQogICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigi
LS1mcm9udGVuZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IkdlbmVyYXRlIGNvZGUgZm9y
IHRoZSBmcm9udGVuZC1zaWRlIG9mIHRoZSBwcm90b2NvbCBvbmx5LiIpCiAgICAgY2xpX3BhcnNl
ci5hZGRfb3B0aW9uKCItLWJhY2tlbmQiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJHZW5l
cmF0ZSBjb2RlIGZvciB0aGUgYmFja2VuZC1zaWRlIG9mIHRoZSBwcm90b2NvbCBvbmx5LiIpCisg
ICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLXBsYXRmb3JtIiwgZGVmYXVsdD0iZ2VuZXJpYyIs
IGhlbHA9IlRoZSBwbGF0Zm9ybSBvZiB0aGUgYmFja2VuZCBiZWluZyBnZW5lcmF0ZWQuIEZvciBl
eGFtcGxlLCB3ZSBjb21waWxlIFdlYktpdDIgZm9yIGVpdGhlciBtYWNPUyBvciBpT1MuIFRoaXMg
dmFsdWUgaXMgY2FzZS1pbnNlbnNpdGl2ZS4gQWxsb3dlZCB2YWx1ZXM6ICVzIiAlICIsICIuam9p
bihhbGxvd2VkX3BsYXRmb3JtX25hbWVzKSkKICAgICBvcHRpb25zID0gTm9uZQogCiAgICAgYXJn
X29wdGlvbnMsIGFyZ192YWx1ZXMgPSBjbGlfcGFyc2VyLnBhcnNlX2FyZ3MoKQpAQCAtMjQ5LDYg
KzI1NSw3IEBAIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgICAgICdvdXRwdXRfZGly
cGF0aCc6IGFyZ19vcHRpb25zLm91dHB1dERpciwKICAgICAgICAgJ2NvbmNhdGVuYXRlX291dHB1
dCc6IGFyZ19vcHRpb25zLnRlc3QsCiAgICAgICAgICdmcmFtZXdvcmtfbmFtZSc6IGFyZ19vcHRp
b25zLmZyYW1ld29yaywKKyAgICAgICAgJ3BsYXRmb3JtX25hbWUnOiBhcmdfb3B0aW9ucy5wbGF0
Zm9ybSwKICAgICAgICAgJ2ZvcmNlX291dHB1dCc6IGFyZ19vcHRpb25zLmZvcmNlLAogICAgICAg
ICAnZ2VuZXJhdGVfYmFja2VuZCc6IGdlbmVyYXRlX2JhY2tlbmQsCiAgICAgICAgICdnZW5lcmF0
ZV9mcm9udGVuZCc6IGdlbmVyYXRlX2Zyb250ZW5kLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297662</attachid>
            <date>2016-12-22 11:34:55 -0800</date>
            <delta_ts>2017-01-03 13:27:52 -0800</delta_ts>
            <desc>[COMBINED PATCH v2]</desc>
            <filename>bug-166003-20161222113350.patch</filename>
            <type>text/plain</type>
            <size>1864565</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwMTAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NWY1NzI1MmZmZmQzOTRmY2NmZDVhYjA4ZTdiZTMxZDJlNWE1ZmEzLi43N2M4MGY5NDYxOTkxMzYw
NWM3NjQ4OGQzNzc2ZjIzNmNiYTI3YWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MTEgQEAKKzIwMTYtMTItMjEgIEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgV2ViIEluc3BlY3RvcjogdGVhY2ggdGhlIHByb3RvY29sIGdlbmVyYXRvciBhYm91
dCBwbGF0Zm9ybS1zcGVjaWZpYyB0eXBlcywgZXZlbnRzLCBhbmQgY29tbWFuZHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjAwMworICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjg3MTg5OTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIHBhcnNlciwgbW9kZWwsIGFu
ZCBnZW5lcmF0b3Itc2lkZSBjaGFuZ2VzIHRvIGFjY291bnQgZm9yCisgICAgICAgIHBsYXRmb3Jt
LXNwZWNpZmljIHR5cGVzLCBldmVudHMsIGFuZCBjb21tYW5kcy4gVGhlICdwbGF0Zm9ybScgcHJv
cGVydHkgaXMgcGFyc2VkCisgICAgICAgIGZvciB0b3AtbGV2ZWwgZGVmaW5pdGlvbnMgYW5kIGFz
c3VtZWQgdG8gYmUgdGhlICdnZW5lcmljJyBwbGF0Zm9ybSBpZiBub25lIGlzIHNwZWNpZmllZC4K
KworICAgICAgICBTaW5jZSB0aGUgZ2VuZXJhdG9yJ3MgcGxhdGZvcm0gc2V0dGluZyBhY3RzIHRv
IGZpbHRlciBkZWZpbml0aW9ucyB3aXRoIGFuIGluY29tcGF0aWJsZSBwbGF0Zm9ybSwKKyAgICAg
ICAgYWxsIGdlbmVyYXRvcnMgbXVzdCBiZSBtb2RpZmllZCB0byBjb25zdWx0IGEgbGlzdCBvZiBm
aWx0ZXJlZCB0eXBlcy9jb21tYW5kcy9ldmVudHMgZm9yCisgICAgICAgIGEgZG9tYWluIGluc3Rl
YWQgb2YgZGlyZWN0bHkgYWNjZXNzaW5nIERvbWFpbi57dHlwZV9kZWNsYXJhdGlvbnMsIGNvbW1h
bmRzLCBldmVudHN9LiBUbyBwcmV2ZW50CisgICAgICAgIGFjY2lkZW50YWwgbWlzdXNlLCBoaWRl
IHRob3NlIGZpZWxkcyBiZWhpbmQgYWNjZXNzb3JzIChlLmcuLCBgYWxsX3R5cGVfZGVjbGFyYXRp
b25zKClgKSBzbyB0aGF0IHRoZXkKKyAgICAgICAgYXJlIHN0aWxsIGFjY2Vzc2libGUgaWYgdHJ1
bHkgbmVjZXNzYXJ5LCBidXQgbm90IHVzZWQgYnkgZGVmYXVsdCBhbmQgY2F1c2VkIGFuIGVycm9y
IGlmIG5vdCBtaWdyYXRlZC4KKworICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OgorICAg
ICAgICAoQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVy
YXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5kb21haW5z
X3RvX2dlbmVyYXRlKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJh
dG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAg
KENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVy
X2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6
CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmRv
bWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9y
X2RvbWFpbik6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9zbWFsbF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9m
b3JfZG9tYWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuX2dlbmVyYXRlX2xhcmdlX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9u
X2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwRnJvbnRl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAg
ICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRj
aGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
LnB5OgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAgICAgIChDcHBGcm9udGVuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bnNfZm9yX2RvbWFpbik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwUHJvdG9jb2xU
eXBlc0hlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMpOgorICAg
ICAgICAoX2dlbmVyYXRlX3R5cGVkZWZzX2Zvcl9kb21haW4pOgorICAgICAgICAoX2dlbmVyYXRl
X2J1aWxkZXJzX2Zvcl9kb21haW4pOgorICAgICAgICAoX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFy
YXRpb25zX2Zvcl9iaW5kaW5nX3RyYWl0cyk6CisgICAgICAgIChfZ2VuZXJhdGVfZGVjbGFyYXRp
b25zX2Zvcl9lbnVtX2NvbnZlcnNpb25fbWV0aG9kcyk6CisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24u
cHk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dl
bmVyYXRlX2VudW1fY29udmVyc2lvbl9tZXRob2RzX2Zvcl9kb21haW4pOgorICAgICAgICAoQ3Bw
UHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9vcGVuX2ZpZWxk
X25hbWVzKToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
ci5fZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbik6CisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5OgorICAgICAgICAo
SlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbik6CisgICAg
ICAgIChKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAg
ICAgICAgKEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRlX2RvbWFpbik6CisgICAg
ICAgIChKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlLnNob3Vs
ZF9nZW5lcmF0ZV9kb21haW4pOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OgorICAg
ICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2Vu
ZXJhdGUpOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9n
ZW5lcmF0ZV9vYmpjX2ZvcndhcmRfZGVjbGFyYXRpb25zKToKKyAgICAgICAgKE9iakNCYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfb2JqY19oYW5kbGVyX2RlY2xhcmF0
aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAg
ICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IpOgorICAgICAg
ICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZG9tYWluc190
b19nZW5lcmF0ZSk6CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKToK
KyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IpOiBEZWxl
dGVkLgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5f
X2luaXRfXyk6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0
aW9uR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQ29u
ZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRv
ci5nZW5lcmF0ZV9vdXRwdXQpOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25J
bXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9m
b3JfZG9tYWluKTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50
YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1h
bmQpOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdl
bmVyYXRvci5fZ2VuZXJhdGVfc3VjY2Vzc19ibG9ja19mb3JfY29tbWFuZCk6IERlbGV0ZWQuCisg
ICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0
ZV9zdWNjZXNzX2Jsb2NrX2Zvcl9jb21tYW5kLmFuZCk6IERlbGV0ZWQuCisgICAgICAgIChPYmpD
Q29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9jb252ZXJzaW9u
c19mb3JfY29tbWFuZCk6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxl
bWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9jb252ZXJzaW9uc19mb3JfY29tbWFuZC5pbl9w
YXJhbV9leHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1w
bGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2ludm9jYXRpb25fZm9yX2NvbW1hbmQpOiBE
ZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19jb25maWd1cmF0aW9uX2hlYWRlci5weToKKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSGVh
ZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChPYmpDQ29uZmlndXJhdGlv
bkhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfcHJvcGVydGllc19mb3JfZG9tYWluKToKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlv
bl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50
YXRpb25HZW5lcmF0b3IpOgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlv
bkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25J
bXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRh
dGlvbl9mb3JfZG9tYWlucyk6CisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0
aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9pdmFycyk6CisgICAgICAgIChPYmpDQ29uZmlndXJhdGlv
bkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9kZWFsbG9jKToKKyAgICAgICAgKE9i
akNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5p
dF9fKTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQmFj
a2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOiBE
ZWxldGVkLgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IuX2dlbmVyYXRlX2NvbmZpZ3VyYXRpb25faW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbnMp
OiBEZWxldGVkLgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuX2dlbmVyYXRlX2l2YXJzKTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNCYWNrZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9kZWFsbG9jKTogRGVs
ZXRlZC4KKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLl9nZW5lcmF0ZV9oYW5kbGVyX3NldHRlcl9mb3JfZG9tYWluKTogRGVsZXRlZC4KKyAgICAg
ICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0
ZV9ldmVudF9kaXNwYXRjaGVyX2dldHRlcl9mb3JfZG9tYWluKTogRGVsZXRlZC4KKyAgICAgICAg
KE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl92YXJpYWJsZV9u
YW1lX3ByZWZpeF9mb3JfZG9tYWluKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbnMpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqY19oZWFkZXIucHk6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLmdlbmVy
YXRlX291dHB1dCk6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9mb3J3
YXJkX2RlY2xhcmF0aW9ucyk6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0
ZV9lbnVtcyk6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV90eXBlcyk6
CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9jb21tYW5kX3Byb3RvY29s
cyk6CisgICAgICAgIChPYmpDSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudF9pbnRlcmZh
Y2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
aW50ZXJuYWxfaGVhZGVyLnB5OgorICAgICAgICAoT2JqQ0ludGVybmFsSGVhZGVyR2VuZXJhdG9y
LmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChPYmpDSW50ZXJuYWxIZWFkZXJHZW5lcmF0b3Iu
X2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfcHJpdmF0ZV9pbnRlcmZhY2VzKToKKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9j
b252ZXJzaW9uc19oZWFkZXIucHk6CisgICAgICAgIChPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lv
bnNIZWFkZXJHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAgICAgIChPYmpDUHJv
dG9jb2xUeXBlQ29udmVyc2lvbnNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2VudW1fY29udmVy
c2lvbl9mdW5jdGlvbnMpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2ltcGxlbWVudGF0aW9uLnB5Ogor
ICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAgICAgIChPYmpDUHJvdG9jb2xUeXBlQ29udmVy
c2lvbnNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfdHlwZV9mYWN0b3J5X2NhdGVn
b3J5X2ludGVyZmFjZSk6CisgICAgICAgIChPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfdHlwZV9mYWN0b3J5X2NhdGVnb3J5X2ltcGxl
bWVudGF0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChPYmpDUHJv
dG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgor
ICAgICAgICAoT2JqQ1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0
ZV90eXBlX2ltcGxlbWVudGF0aW9ucyk6CisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRvci5weToKKyAgICAgICAgKEdlbmVyYXRvci5jYW5fZ2VuZXJhdGVfcGxh
dGZvcm0pOgorICAgICAgICAoR2VuZXJhdG9yKToKKyAgICAgICAgKEdlbmVyYXRvci50eXBlX2Rl
Y2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKEdlbmVyYXRvci5jb21tYW5kc19mb3Jf
ZG9tYWluKToKKyAgICAgICAgKEdlbmVyYXRvci5ldmVudHNfZm9yX2RvbWFpbik6CisgICAgICAg
IFRoZXNlIGFyZSB0aGUgY29yZSBtZXRob2RzIGZvciBjb21wdXRpbmcgd2hldGhlciBhIGRlZmlu
aXRpb24gY2FuIGJlIHVzZWQgZ2l2ZW4gYSB0YXJnZXQgcGxhdGZvcm0uCisKKyAgICAgICAgKEdl
bmVyYXRvci5jYWxjdWxhdGVfdHlwZXNfcmVxdWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMpOgorICAg
ICAgICAoR2VuZXJhdG9yLl90cmF2ZXJzZV9hbmRfYXNzaWduX2VudW1fdmFsdWVzKToKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weToKKyAgICAgICAgKFByb3Rv
Y29sLnBhcnNlX3R5cGVfZGVjbGFyYXRpb24pOgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfY29t
bWFuZCk6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV9ldmVudCk6CisgICAgICAgIChQcm90b2Nv
bC5yZXNvbHZlX3R5cGVzKToKKworICAgICAgICAoRG9tYWluLl9faW5pdF9fKToKKyAgICAgICAg
KERvbWFpbik6CisgICAgICAgIChEb21haW4uYWxsX3R5cGVfZGVjbGFyYXRpb25zKToKKyAgICAg
ICAgKERvbWFpbi5hbGxfY29tbWFuZHMpOgorICAgICAgICAoRG9tYWluLmFsbF9ldmVudHMpOgor
ICAgICAgICBIaWRlIGZpZWxkcyBiZWhpbmQgdGhlc2UgYWNjZXNzb3JzIHNvIGl0J3MgcmVhbGx5
IG9idmlvdXMgd2hlbiB3ZSBhcmUgaWdub3JpbmcgcGxhdGZvcm0gZmlsdGVyaW5nLgorCisgICAg
ICAgIChEb21haW4ucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoVHlwZURlY2xh
cmF0aW9uLl9faW5pdF9fKToKKyAgICAgICAgKENvbW1hbmQuX19pbml0X18pOgorICAgICAgICAo
RXZlbnQuX19pbml0X18pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2Jq
Y19nZW5lcmF0b3IucHk6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV90
eXBlc19mb3JfZG9tYWluKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3IpOgorICAgICAgICAoT2Jq
Q0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfY29tbWFuZHNfZm9yX2RvbWFpbik6CisgICAgICAg
IChPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9ldmVudHNfZm9yX2RvbWFpbik6CisgICAg
ICAgIChPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fdHlwZXNfZmlsdGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl90
eXBlc19maWx0ZXIuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl90eXBlcyk6IERlbGV0ZWQuCisgICAg
ICAgIChPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVy
X2ZpbHRlcik6IERlbGV0ZWQuCisgICAgICAgIChPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0
ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRlci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2Nv
bW1hbmRfaGFuZGxlcik6IERlbGV0ZWQuCisgICAgICAgIChPYmpDR2VuZXJhdG9yLnNob3VsZF9n
ZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJf
ZmlsdGVyLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRfZGlzcGF0Y2hlcik6IERlbGV0ZWQu
CisgICAgICAgIENsZWFuIHVwIHNvbWUgbWVzc3kgY29kZSB0aGF0IGVzc2VudGlhbGx5IGRpZCB0
aGUgc2FtZSBkZWZpbml0aW9uIGZpbHRlcmluZyBhcyB3ZSBtdXN0IGRvIGZvciBwbGF0Zm9ybXMu
CisgICAgICAgIFRoaXMgd2lsbCBiZSBlbmhhbmNlZCBpbiBhIGZ1dHVyZSBwYXRjaCBzbyB0aGF0
IHBsYXRmb3JtIGZpbHRlcmluZyB3aWxsIHRha2UgcHJpb3JpdHkgb3ZlciB0aGUgdGFyZ2V0IGZy
YW1ld29yay4KKworICAgICAgICBUaGUgZm9sbG93aW5nIHJlc3VsdHMgbmVlZCByZWJhc2VsaW5p
bmcgYmVjYXVzZSB0aGUgY2xhc3MgbmFtZXMgZm9yIHR3byBnZW5lcmF0b3JzIHdlcmUgc3dhcHBl
ZCBieSBhY2NpZGVudC4KKyAgICAgICAgRml4aW5nIHRoZSBuYW1lcyBjYXVzZXMgdGhlIG9yZGVy
IG9mIGdlbmVyYXRlZCBmaWxlcyB0byBjaGFuZ2UsIGFuZCB0aGlzIGdlbmVyYXRlcyB1Z2x5IGRp
ZmZzIGJlY2F1c2UgZXZlcnkKKyAgICAgICAgZ2VuZXJhdGVkIGZpbGUgaW5jbHVkZXMgdGhlIHNh
bWUgY29weXJpZ2h0IGJsb2NrIGF0IHRoZSB0b3AuCisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRl
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdDoKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2VudW0tdmFs
dWVzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdDoK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2dlbmVy
YXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZm
ZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24t
cmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0Ogor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUu
anNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0OgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJp
bmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdDoKKworMjAxNi0xMi0yMSAgQnJpYW4gQnVyZyAg
PGJidXJnQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiB0ZWFjaCB0aGUgcHJv
dG9jb2wgZ2VuZXJhdG9yIGFib3V0IHBsYXRmb3JtLXNwZWNpZmljIHR5cGVzLCBldmVudHMsIGFu
ZCBjb21tYW5kcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY2MDAzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yODcxODk5MD4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVu
dHMgcGFyc2VyLCBtb2RlbCwgYW5kIGdlbmVyYXRvci1zaWRlIGNoYW5nZXMgdG8gYWNjb3VudCBm
b3IKKyAgICAgICAgcGxhdGZvcm0tc3BlY2lmaWMgdHlwZXMsIGV2ZW50cywgYW5kIGNvbW1hbmRz
LiBUaGUgJ3BsYXRmb3JtJyBwcm9wZXJ0eSBpcyBwYXJzZWQKKyAgICAgICAgZm9yIHRvcC1sZXZl
bCBkZWZpbml0aW9ucyBhbmQgYXNzdW1lZCB0byBiZSB0aGUgJ2dlbmVyaWMnIHBsYXRmb3JtIGlm
IG5vbmUgaXMgc3BlY2lmaWVkLgorCisgICAgICAgIFNpbmNlIHRoZSBnZW5lcmF0b3IncyBwbGF0
Zm9ybSBzZXR0aW5nIGFjdHMgdG8gZmlsdGVyIGRlZmluaXRpb25zIHdpdGggYW4gaW5jb21wYXRp
YmxlIHBsYXRmb3JtLAorICAgICAgICBhbGwgZ2VuZXJhdG9ycyBtdXN0IGJlIG1vZGlmaWVkIHRv
IGNvbnN1bHQgYSBsaXN0IG9mIGZpbHRlcmVkIHR5cGVzL2NvbW1hbmRzL2V2ZW50cyBmb3IKKyAg
ICAgICAgYSBkb21haW4gaW5zdGVhZCBvZiBkaXJlY3RseSBhY2Nlc3NpbmcgRG9tYWluLnt0eXBl
X2RlY2xhcmF0aW9ucywgY29tbWFuZHMsIGV2ZW50c30uIFRvIHByZXZlbnQKKyAgICAgICAgYWNj
aWRlbnRhbCBtaXN1c2UsIGhpZGUgdGhvc2UgZmllbGRzIGJlaGluZCBhY2Nlc3NvcnMgKGUuZy4s
IGBhbGxfdHlwZV9kZWNsYXJhdGlvbnMoKWApIHNvIHRoYXQgdGhleQorICAgICAgICBhcmUgc3Rp
bGwgYWNjZXNzaWJsZSBpZiB0cnVseSBuZWNlc3NhcnksIGJ1dCBub3QgdXNlZCBieSBkZWZhdWx0
IGFuZCBjYXVzZWQgYW4gZXJyb3IgaWYgbm90IG1pZ3JhdGVkLgorCisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0
Y2hlcl9oZWFkZXIucHk6CisgICAgICAgIChDcHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2Vu
ZF9kaXNwYXRjaGVyX2hlYWRlci5weToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVh
ZGVyR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoQ3BwQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zv
cl9kb21haW4pOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Iu
X2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAgICAgIChDcHBCYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX3NtYWxsX2Rpc3BhdGNoZXJfc3dp
dGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4pOgorICAgICAgICAoQ3BwQmFja2VuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfbGFyZ2VfZGlzcGF0Y2hlcl9z
d2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbik6CisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6
CisgICAgICAgIChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZG9tYWluc190
b19nZW5lcmF0ZSk6CisgICAgICAgIChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0
b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4pOgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChDcHBGcm9udGVuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKENw
cEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNw
YXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHk6Cisg
ICAgICAgIChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9mb3J3YXJk
X2RlY2xhcmF0aW9ucyk6CisgICAgICAgIChfZ2VuZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbik6
CisgICAgICAgIChfZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbik6CisgICAgICAgIChfZ2Vu
ZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2JpbmRpbmdfdHJhaXRzKToKKyAgICAgICAg
KF9nZW5lcmF0ZV9kZWNsYXJhdGlvbnNfZm9yX2VudW1fY29udmVyc2lvbl9tZXRob2RzKToKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90
eXBlc19pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX21ldGhvZHNfZm9yX2Rv
bWFpbik6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
X2dlbmVyYXRlX29wZW5fZmllbGRfbmFtZXMpOgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0lt
cGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluKToKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29t
bWFuZHMucHk6CisgICAgICAgIChKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvci5zaG91bGRfZ2Vu
ZXJhdGVfZG9tYWluKToKKyAgICAgICAgKEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmRvbWFp
bnNfdG9fZ2VuZXJhdGUpOgorICAgICAgICAoSlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuZ2Vu
ZXJhdGVfZG9tYWluKToKKyAgICAgICAgKEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmRvbWFp
bnNfdG9fZ2VuZXJhdGUuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbik6IERlbGV0ZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0
Y2hlcl9oZWFkZXIucHk6CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNfZm9yd2FyZF9kZWNsYXJhdGlvbnMpOgor
ICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9v
YmpjX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHk6CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvcik6CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2ltcGxlbWVu
dGF0aW9uX2Zvcl9kb21haW4pOgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRh
dGlvbkdlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxl
bWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNDb25m
aWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKTogRGVsZXRl
ZC4KKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZG9t
YWluc190b19nZW5lcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6IERlbGV0ZWQuCisgICAgICAg
IChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5k
bGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4pOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0Nv
bmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBs
ZW1lbnRhdGlvbl9mb3JfY29tbWFuZCk6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQ29uZmlndXJh
dGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zdWNjZXNzX2Jsb2NrX2Zvcl9j
b21tYW5kKTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRp
b25HZW5lcmF0b3IuX2dlbmVyYXRlX3N1Y2Nlc3NfYmxvY2tfZm9yX2NvbW1hbmQuYW5kKTogRGVs
ZXRlZC4KKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
X2dlbmVyYXRlX2NvbnZlcnNpb25zX2Zvcl9jb21tYW5kKTogRGVsZXRlZC4KKyAgICAgICAgKE9i
akNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2NvbnZlcnNp
b25zX2Zvcl9jb21tYW5kLmluX3BhcmFtX2V4cHJlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAo
T2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfaW52b2Nh
dGlvbl9mb3JfY29tbWFuZCk6IERlbGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5OgorICAgICAgICAo
T2JqQ0NvbmZpZ3VyYXRpb25IZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAg
ICAgKE9iakNDb25maWd1cmF0aW9uSGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9wcm9wZXJ0aWVz
X2Zvcl9kb21haW4pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0Nv
bmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChPYmpDQ29uZmln
dXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAg
IChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9jb25m
aWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW5zKToKKyAgICAgICAgKE9iakNDb25m
aWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2l2YXJzKToKKyAgICAg
ICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rl
YWxsb2MpOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50
YXRpb25HZW5lcmF0b3IuX19pbml0X18pOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0JhY2tlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKTogRGVsZXRl
ZC4KKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
LmdlbmVyYXRlX291dHB1dCk6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfY29uZmlndXJhdGlvbl9pbXBsZW1l
bnRhdGlvbl9mb3JfZG9tYWlucyk6IERlbGV0ZWQuCisgICAgICAgIChPYmpDQmFja2VuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfaXZhcnMpOiBEZWxldGVkLgor
ICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dl
bmVyYXRlX2RlYWxsb2MpOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfc2V0dGVyX2Zvcl9kb21h
aW4pOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IuX2dlbmVyYXRlX2V2ZW50X2Rpc3BhdGNoZXJfZ2V0dGVyX2Zvcl9kb21haW4p
OiBEZWxldGVkLgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuX3ZhcmlhYmxlX25hbWVfcHJlZml4X2Zvcl9kb21haW4pOiBEZWxldGVkLgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0Zyb250ZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUpOgorICAgICAg
ICAoT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0
ZV9ldmVudF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9ucyk6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weToKKyAgICAgICAgKE9iakNI
ZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5l
cmF0b3IuX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zKToKKyAgICAgICAgKE9iakNIZWFk
ZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2VudW1zKToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5lcmF0
b3IuX2dlbmVyYXRlX3R5cGVzKToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5lcmF0b3IuX2dlbmVy
YXRlX2NvbW1hbmRfcHJvdG9jb2xzKToKKyAgICAgICAgKE9iakNIZWFkZXJHZW5lcmF0b3IuX2dl
bmVyYXRlX2V2ZW50X2ludGVyZmFjZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfb2JqY19pbnRlcm5hbF9oZWFkZXIucHk6CisgICAgICAgIChPYmpDSW50
ZXJuYWxIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKE9iakNJbnRl
cm5hbEhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9wcml2YXRlX2lu
dGVyZmFjZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hlYWRlci5weToKKyAgICAgICAgKE9iakNQ
cm90b2NvbFR5cGVDb252ZXJzaW9uc0hlYWRlckdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRl
KToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0hlYWRlckdlbmVyYXRvci5f
Z2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX2Z1bmN0aW9ucyk6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNf
aW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKE9i
akNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0
ZV90eXBlX2ZhY3RvcnlfY2F0ZWdvcnlfaW50ZXJmYWNlKToKKyAgICAgICAgKE9iakNQcm90b2Nv
bFR5cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV90eXBlX2Zh
Y3RvcnlfY2F0ZWdvcnlfaW1wbGVtZW50YXRpb24pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5w
eToKKyAgICAgICAgKE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZG9t
YWluc190b19nZW5lcmF0ZSk6CisgICAgICAgIChPYmpDUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0
aW9uR2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfaW1wbGVtZW50YXRpb25zKToKKworICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5OgorICAgICAgICAoR2VuZXJh
dG9yLmNhbl9nZW5lcmF0ZV9wbGF0Zm9ybSk6CisgICAgICAgIChHZW5lcmF0b3IpOgorICAgICAg
ICAoR2VuZXJhdG9yLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAoR2Vu
ZXJhdG9yLmNvbW1hbmRzX2Zvcl9kb21haW4pOgorICAgICAgICAoR2VuZXJhdG9yLmV2ZW50c19m
b3JfZG9tYWluKToKKyAgICAgICAgVGhlc2UgYXJlIHRoZSBjb3JlIG1ldGhvZHMgZm9yIGNvbXB1
dGluZyB3aGV0aGVyIGEgZGVmaW5pdGlvbiBjYW4gYmUgdXNlZCBnaXZlbiBhIHRhcmdldCBwbGF0
Zm9ybS4KKworICAgICAgICAoR2VuZXJhdG9yLmNhbGN1bGF0ZV90eXBlc19yZXF1aXJpbmdfc2hh
cGVfYXNzZXJ0aW9ucyk6CisgICAgICAgIChHZW5lcmF0b3IuX3RyYXZlcnNlX2FuZF9hc3NpZ25f
ZW51bV92YWx1ZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxz
LnB5OgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfdHlwZV9kZWNsYXJhdGlvbik6CisgICAgICAg
IChQcm90b2NvbC5wYXJzZV9jb21tYW5kKToKKyAgICAgICAgKFByb3RvY29sLnBhcnNlX2V2ZW50
KToKKyAgICAgICAgKFByb3RvY29sLnJlc29sdmVfdHlwZXMpOgorCisgICAgICAgIChEb21haW4u
X19pbml0X18pOgorICAgICAgICAoRG9tYWluKToKKyAgICAgICAgKERvbWFpbi5hbGxfdHlwZV9k
ZWNsYXJhdGlvbnMpOgorICAgICAgICAoRG9tYWluLmFsbF9jb21tYW5kcyk6CisgICAgICAgIChE
b21haW4uYWxsX2V2ZW50cyk6CisgICAgICAgIEhpZGUgZmllbGRzIGJlaGluZCB0aGVzZSBhY2Nl
c3NvcnMgc28gaXQncyByZWFsbHkgb2J2aW91cyB3aGVuIHdlIGFyZSBpZ25vcmluZyBwbGF0Zm9y
bSBmaWx0ZXJpbmcuCisKKyAgICAgICAgKERvbWFpbi5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyk6
CisgICAgICAgIChUeXBlRGVjbGFyYXRpb24uX19pbml0X18pOgorICAgICAgICAoQ29tbWFuZC5f
X2luaXRfXyk6CisgICAgICAgIChFdmVudC5fX2luaXRfXyk6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvci5weToKKyAgICAgICAgKE9iakNHZW5lcmF0
b3Iuc2hvdWxkX2dlbmVyYXRlX3R5cGVzX2Zvcl9kb21haW4pOgorICAgICAgICAoT2JqQ0dlbmVy
YXRvcik6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9jb21tYW5kc19m
b3JfZG9tYWluKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2V2ZW50
c19mb3JfZG9tYWluKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2Rv
bWFpbl90eXBlc19maWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5zaG91
bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVzX2ZpbHRlci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5
cGVzKTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2Rv
bWFpbl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKE9iakNHZW5l
cmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyLnNob3Vs
ZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKE9i
akNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRl
cik6IERlbGV0ZWQuCisgICAgICAgIChPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21h
aW5fZXZlbnRfZGlzcGF0Y2hlcl9maWx0ZXIuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVudF9k
aXNwYXRjaGVyKTogRGVsZXRlZC4KKyAgICAgICAgQ2xlYW4gdXAgc29tZSBtZXNzeSBjb2RlIHRo
YXQgZXNzZW50aWFsbHkgZGlkIHRoZSBzYW1lIGRlZmluaXRpb24gZmlsdGVyaW5nIGFzIHdlIG11
c3QgZG8gZm9yIHBsYXRmb3Jtcy4KKyAgICAgICAgVGhpcyB3aWxsIGJlIGVuaGFuY2VkIGluIGEg
ZnV0dXJlIHBhdGNoIHNvIHRoYXQgcGxhdGZvcm0gZmlsdGVyaW5nIHdpbGwgdGFrZSBwcmlvcml0
eSBvdmVyIHRoZSB0YXJnZXQgZnJhbWV3b3JrLgorCisgICAgICAgIFRoZSByZXN1bHRzIGFib3Zl
IG5lZWQgcmViYXNlbGluaW5nIGJlY2F1c2UgdGhlIGNsYXNzIG5hbWVzIGZvciB0d28gZ2VuZXJh
dG9ycyB3ZXJlIHN3YXBwZWQgYnkgYWNjaWRlbnQuCisgICAgICAgIEZpeGluZyB0aGUgbmFtZXMg
Y2F1c2VzIHRoZSBvcmRlciBvZiBnZW5lcmF0ZWQgZmlsZXMgdG8gY2hhbmdlLCBhbmQgdGhpcyBn
ZW5lcmF0ZXMgdWdseSBkaWZmcyBiZWNhdXNlIGV2ZXJ5CisgICAgICAgIGdlbmVyYXRlZCBmaWxl
IGluY2x1ZGVzIHRoZSBzYW1lIGNvcHlyaWdodCBibG9jayBhdCB0aGUgdG9wLgorCisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRo
LWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1
cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMu
anNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRl
cnMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1
bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9z
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5
cGUtc2V0dGVycy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlw
ZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdDoKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFy
YXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29u
LXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQ6CisKKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tY29tbWFu
ZC13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbi1lcnJvcjogQWRkZWQuCisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1p
bnZhbGlkLXBsYXRmb3JtLmpzb24tZXJyb3I6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXdpdGgtaW52YWxpZC1wbGF0Zm9y
bS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tdHlwZS13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbjogQWRkZWQuCisKKyAgICAg
ICAgQWRkIGVycm9yIHRlc3QgY2FzZXMgZm9yIGludmFsaWQgcGxhdGZvcm1zIGluIGNvbW1hbmRz
LCB0eXBlcywgYW5kIGV2ZW50cy4KKworICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbjogQWRkZWQuCisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kZWZpbml0aW9u
cy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvYWxsL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb246
IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9leHBlY3RlZC9k
ZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdDogQWRkZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvaW9zL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2lvcy9l
eHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdDogQWRkZWQu
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvbWFjL2RlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL21hYy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3Vs
dDogQWRkZWQuCisKKyAgICAgICAgQWRkIGEgYmFzaWMgNC13YXkgdGVzdCB0aGF0IGdlbmVyYXRl
cyBjb2RlIGZvciBlYWNoIHBsYXRmb3JtIGZyb20gdGhlIHNhbWUgc3BlY2lmaWNhdGlvbi4KKyAg
ICAgICAgV2l0aCAnbWFjb3MnIHBsYXRmb3JtIGZvciBlYWNoIGRlZmluaXRpb24sIG9ubHkgJ2Fs
bCcgYW5kICdtYWMnIGdlbmVyYXRlIGFueXRoaW5nIGludGVyZXN0aW5nLgorCisyMDE2LTEyLTIx
ICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6
IHRlYWNoIHRoZSBwcm90b2NvbCBnZW5lcmF0b3IgYWJvdXQgcGxhdGZvcm0tc3BlY2lmaWMgdHlw
ZXMsIGV2ZW50cywgYW5kIGNvbW1hbmRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjYwMDMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI4NzE4OTkw
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2Ug
aXQgcG9zc2libGUgdG8gdGVzdCBpbnNwZWN0b3IgcHJvdG9jb2wgZ2VuZXJhdG9yIG91dHB1dCBm
b3IgZGlmZmVyZW50IHBsYXRmb3Jtcy4KKworICAgICAgICBNb3ZlIGV4aXN0aW5nIHRlc3RzIHRv
IHRoZSBnZW5lcmljLyBzdWJkaXJlY3RvcnksIGFzIHRoZXkgYXJlIHRvIGJlIGdlbmVyYXRlZAor
ICAgICAgICB3aXRob3V0IGFueSBzcGVjaWZpYyBwbGF0Zm9ybS4gTGF0ZXIsIHBsYXRmb3JtLXNw
ZWNpZmljIGdlbmVyYXRvciBiZWhhdmlvciB3aWxsIGJlCisgICAgICAgIHRlc3RlZCBieSBjbG9u
aW5nIHRoZSBzYW1lIHRlc3QgdG8gbXVsdGlwbGUgcGxhdGZvcm0gZGlyZWN0b3JpZXMuCisKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31jb21tYW5kcy13
aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHN7LyA9PiAvZ2VuZXJpYy99Y29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJh
bWV0ZXJzLmpzb24KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5l
cmljL31kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31lbnVtLXZhbHVlcy5qc29uCisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXZlbnRzLXdp
dGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbi1yZXN1bHQKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9n
ZW5lcmljL31leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFt
ZXRlcnMuanNvbi1yZXN1bHQKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+
IC9nZW5lcmljL31leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24tcmVzdWx0CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJp
Yy99ZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25h
bC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tYXZhaWxhYmlsaXR5Lmpz
b24tZXJyb3IKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmlj
L31leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVz
Lmpzb24tZXJyb3IKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5l
cmljL31leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJldHVybi1wYXJhbWV0ZXIt
bmFtZXMuanNvbi1lcnJvcgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4g
L2dlbmVyaWMvfWV4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1l
cy5qc29uLWVycm9yCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2Vu
ZXJpYy99ZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1l
cnJvcgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4
cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24tZXJyb3IKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9m
YWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1lcnJvcgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5
cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IKKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9mYWlsLW9uLW51bWJlci10
eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlw
ZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5
cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFy
YXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2ZhaWwtb24tdHlwZS1yZWZl
cmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbi1lcnJvcgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWxv
d2VyY2FzZS1uYW1lLmpzb24tZXJyb3IKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2Ut
aW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVm
ZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgt
ZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0c3svID0+IC9nZW5lcmljL31leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFp
bi5qc29uLXJlc3VsdAorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dl
bmVyaWMvfWV4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3Vs
dAorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVj
dGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdAor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdAorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWV4cGVjdGVkL3R5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb24tcmVzdWx0CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHN7LyA9PiAvZ2VuZXJpYy99ZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5q
c29uLXJlc3VsdAorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVy
aWMvfWV4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31mYWlsLW9uLWRv
bWFpbi1hdmFpbGFiaWxpdHkuanNvbgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
ey8gPT4gL2dlbmVyaWMvfWZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXIt
bmFtZXMuanNvbgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVy
aWMvfWZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29u
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZmFpbC1v
bi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24KKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRl
Y2xhcmF0aW9ucy5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAv
Z2VuZXJpYy99ZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWZhaWwtb24tZW51bS13
aXRoLW5vLXZhbHVlcy5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9
PiAvZ2VuZXJpYy99ZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcu
anNvbgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWZh
aWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31mYWlsLW9uLXN0cmluZy10eXBl
ZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlw
ZS1tZW1iZXIuanNvbgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dl
bmVyaWMvfWZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29u
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZmFpbC1v
bi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uCisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHN7LyA9PiAvZ2VuZXJpYy99ZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJj
YXNlLW5hbWUuanNvbgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dl
bmVyaWMvfWZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9u
Lmpzb24KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL31m
YWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfWdlbmVyYXRlLWRvbWFp
bnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHN7LyA9PiAvZ2VuZXJpYy99c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfXNoYWRvd2Vk
LW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHN7LyA9PiAvZ2VuZXJpYy99dHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10
eXBlLmpzb24KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmlj
L310eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3Rzey8gPT4gL2dlbmVyaWMvfXR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpz
b24KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0c3svID0+IC9nZW5lcmljL310eXBl
LWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0c3svID0+IC9nZW5lcmljL310eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24K
KworMjAxNi0xMi0xNyAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKworICAgICAgICBX
ZWIgSW5zcGVjdG9yOiB0ZWFjaCB0aGUgcHJvdG9jb2wgZ2VuZXJhdG9yIGFib3V0IHBsYXRmb3Jt
LXNwZWNpZmljIHR5cGVzLCBldmVudHMsIGFuZCBjb21tYW5kcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MDAzCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8yODcxODk5MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgYSAtLXBsYXRmb3JtIGFyZ3VtZW50IHRvIGdlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weSBhbmQgcHJvcGFnYXRlCisgICAgICAgIHRoZSBzcGVjaWZpZWQg
cGxhdGZvcm0gdG8gZWFjaCBnZW5lcmF0b3IuIFRoaXMgd2lsbCBiZSB1c2VkIGluIHRoZSBuZXh0
IGZldyBwYXRjaGVzCisgICAgICAgIHRvIGV4Y2x1ZGUgdHlwZXMsIGV2ZW50cywgYW5kIGNvbW1h
bmRzIHRoYXQgYXJlIHVuc3VwcG9ydGVkIGJ5IHRoZSBiYWNrZW5kIHBsYXRmb3JtLgorCisgICAg
ICAgIENvdmVydCBhbGwgc3ViY2xhc3NlcyBvZiBHZW5lcmF0b3IgdG8gcGFzcyBhbG9uZyB0aGVp
ciBwb3NpdGlvbmFsIGFyZ3VtZW50cyBzbyB0aGF0IHdlCisgICAgICAgIGNhbiBlYXNpbHkgY2hh
bmdlIGJhc2UgY2xhc3MgYXJndW1lbnRzIHdpdGhvdXQgZWRpdGluZyBhbGwgZ2VuZXJhdG9yIGNv
bnN0cnVjdG9ycy4KKworICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dl
bmVyYXRvci5weToKKyAgICAgICAgKENwcEdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAgIChDcHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlckhlYWRlckdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weToKKyAg
ICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9faW5pdF9fKToKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5w
eToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fX2luaXRf
Xyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENwcEZyb250ZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFk
ZXIucHk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yLl9faW5pdF9f
KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90
b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5OgorICAgICAgICAo
SlNCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5OgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9faW5p
dF9fKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
YmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0NvbmZp
Z3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVy
LnB5OgorICAgICAgICAoT2JqQ0NvbmZpZ3VyYXRpb25IZWFkZXJHZW5lcmF0b3IuX19pbml0X18p
OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25m
aWd1cmF0aW9uX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamNfaGVhZGVyLnB5OgorICAgICAgICAoT2JqQ0hlYWRlckdlbmVyYXRv
ci5fX2luaXRfXyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weToKKyAgICAgICAgKE9iakNJbnRlcm5hbEhlYWRlckdl
bmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5OgorICAgICAg
ICAoT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSGVhZGVyR2VuZXJhdG9yLl9faW5pdF9fKToK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9j
b2xfdHlwZV9jb252ZXJzaW9uc19pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKE9iakNQcm90
b2NvbFR5cGVDb252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xf
dHlwZXNfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChPYmpDUHJvdG9jb2xUeXBlc0ltcGxl
bWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgUGFzcyBhbG9uZyAqYXJncyBp
bnN0ZWFkIG9mIHNpbmdsZSBwb3NpdGlvbmFsIGFyZ3VtZW50cy4KKworICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5OgorICAgICAgICAoR2VuZXJhdG9yLl9f
aW5pdF9fKToKKyAgICAgICAgU2F2ZSB0aGUgdGFyZ2V0IHBsYXRmb3JtIGFuZCBhZGQgYSBnZXR0
ZXIuCisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weToKKyAg
ICAgICAgKFBsYXRmb3JtKToKKyAgICAgICAgKFBsYXRmb3JtLl9faW5pdF9fKToKKyAgICAgICAg
KFBsYXRmb3JtLmZyb21TdHJpbmcpOgorICAgICAgICAoUGxhdGZvcm1zKToKKyAgICAgICAgRGVm
aW5lIHRoZSBhbGxvd2VkIFBsYXRmb3JtIGluc3RhbmNlcyAoaU9TLCBtYWNPUywgYW5kIEFueSku
CisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5
OgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5hbmQuX19pbml0X18pOgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weToKKyAg
ICAgICAgKGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbik6CisgICAgICAgIFBhc3MgYWxvbmcg
KmFyZ3MgaW5zdGVhZCBvZiBzaW5nbGUgcG9zaXRpb25hbCBhcmd1bWVudHMuCisKIDIwMTYtMTIt
MjIgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNzZW1i
bHk6IE1ha2UgdGhlIHNwZWMtdGVzdHMvc3RhcnQud2FzdC5qcyB0ZXN0IHBhc3MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9n
ZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9jcHBfZ2VuZXJhdG9yLnB5CmluZGV4IDZiYjY2ZmQ1MmY1ZTZjMmJhMDJmZWVlMDA5MjE1
ZmVhZjhiMDI1MTUuLmM0NTlmY2FjM2FmNzA0OTJkNmEzMGYzN2JkZGVmZjFhZGE2ZjY3ZmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2NwcF9nZW5lcmF0b3IucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weQpAQCAtNDQsOCArNDQsOCBAQCBfUFJJTUlU
SVZFX1RPX0NQUF9OQU1FX01BUCA9IHsKIH0KIAogY2xhc3MgQ3BwR2VuZXJhdG9yKEdlbmVyYXRv
cik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAg
ICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIEdlbmVyYXRvci5f
X2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgcHJvdG9jb2xfbmFtZShz
ZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnY3Bw
X3Byb3RvY29sX2dyb3VwJywgJycpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkKaW5kZXggMjk3NTYxNWU2YjAzYjU1YTE5ODRmOGQxMzE1MmQ2OTU1MzgzNjY3Yi4u
ODZlODY0OTc0NTM2ZmMwOTg2ZWYxZGU2MzUxMTUxZDA1N2QyNTBjZiAxMDA3NTUKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3Bw
X2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5h
dGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtMzcsOCArMzcsOCBAQCBsb2cgPSBs
b2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIAogCiBjbGFzcyBDcHBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBDcHBHZW5lcmF0b3IuX19p
bml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBDcHBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwg
KmFyZ3MsICoqa3dhcmdzKQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKICAgICAg
ICAgcmV0dXJuICclc0FsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oJyAlIHNlbGYucHJvdG9j
b2xfbmFtZSgpCkBAIC02MywxMSArNjMsMTMgQEAgY2xhc3MgQ3BwQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuICdc
blxuJy5qb2luKHNlY3Rpb25zKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0
aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIGlmIG5vdCBkb21haW4uY29t
bWFuZHM6CisgICAgICAgIGNvbW1hbmRzID0gc2VsZi5jb21tYW5kc19mb3JfZG9tYWluKGRvbWFp
bikKKworICAgICAgICBpZiBub3QgbGVuKGNvbW1hbmRzKToKICAgICAgICAgICAgIHJldHVybiAn
JwogCiAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zID0gW10KLSAgICAgICAgZm9yIGNvbW1h
bmQgaW4gZG9tYWluLmNvbW1hbmRzOgorICAgICAgICBmb3IgY29tbWFuZCBpbiBjb21tYW5kczoK
ICAgICAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9o
YW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQpKQogCiAgICAgICAgIGhhbmRs
ZXJfYXJncyA9IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggODUwM2Y2YmI2ZGZhNGI3
NDA0Nzg4YmE3MmNhOWNmYTFhMjNkMmI3NS4uOTkyNjIyYmRkNzkwMmU4M2FjMjNlODc3ZDkwMTdj
MWE1MTQ1NjRjZSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTM5LDE0ICszOSwxNCBA
QCBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKIAogCiBjbGFzcyBDcHBCYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBDcHBHZW5lcmF0b3IuX19p
bml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBDcHBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwg
KmFyZ3MsICoqa3dhcmdzKQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKICAgICAg
ICAgcmV0dXJuICIlc0JhY2tlbmREaXNwYXRjaGVycy5oIiAlIHNlbGYucHJvdG9jb2xfbmFtZSgp
CiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZp
bHRlcihsYW1iZGEgZG9tYWluOiBsZW4oZG9tYWluLmNvbW1hbmRzKSA+IDAsIEdlbmVyYXRvci5k
b21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAgICAgICByZXR1cm4gZmlsdGVyKGxhbWJkYSBk
b21haW46IGxlbihzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKSkgPiAwLCBHZW5lcmF0
b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKIAogICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQo
c2VsZik6CiAgICAgICAgIGhlYWRlcnMgPSBbCkBAIC05NSw3ICs5NSw3IEBAIGNsYXNzIENwcEJh
Y2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIHVz
ZWRfZW51bV9uYW1lcyA9IHNldCgpCiAKICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMgPSBb
XQotICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAgICAgIGZvciBj
b21tYW5kIGluIHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pOgogICAgICAgICAgICAg
Y29tbWFuZF9kZWNsYXJhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFy
YXRpb25fZm9yX2NvbW1hbmQoY29tbWFuZCwgdXNlZF9lbnVtX25hbWVzKSkKIAogICAgICAgICBo
YW5kbGVyX2FyZ3MgPSB7CkBAIC0xOTIsOSArMTkyLDEwIEBAIGNsYXNzIENwcEJhY2tlbmREaXNw
YXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBjbGFzc0Nv
bXBvbmVudHMuYXBwZW5kKGV4cG9ydE1hY3JvKQogCiAgICAgICAgIGRlY2xhcmF0aW9ucyA9IFtd
Ci0gICAgICAgIGlmIGxlbihkb21haW4uY29tbWFuZHMpID4gMDoKKyAgICAgICAgY29tbWFuZHMg
PSBzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKQorICAgICAgICBpZiBsZW4oY29tbWFu
ZHMpID4gMDoKICAgICAgICAgICAgIGRlY2xhcmF0aW9ucy5hcHBlbmQoJ3ByaXZhdGU6JykKLSAg
ICAgICAgZGVjbGFyYXRpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9k
ZWNsYXJhdGlvbl9mb3JfY29tbWFuZCwgZG9tYWluLmNvbW1hbmRzKSkKKyAgICAgICAgZGVjbGFy
YXRpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9m
b3JfY29tbWFuZCwgY29tbWFuZHMpKQogCiAgICAgICAgIGRlY2xhcmF0aW9uX2FyZ3MgPSB7CiAg
ICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDlhZWNjNGJjYTkyZjJkZGY4Y2ZjNDc3
NWZhODAyZmQ5ZGM4MWQyNjcuLmZjY2VkY2JhN2FhNGQ0NDEwNjcwNjUyN2U0N2I0YmQzM2RjZTZh
OWMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMzgsMTQg
KzM4LDE0IEBAIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCiAKIGNsYXNzIENw
cEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToK
LSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAg
Q3BwR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgQ3BwR2VuZXJhdG9y
Ll9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKIAogICAgIGRlZiBvdXRwdXRfZmlsZW5h
bWUoc2VsZik6CiAgICAgICAgIHJldHVybiAiJXNCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwIiAlIHNl
bGYucHJvdG9jb2xfbmFtZSgpCiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToK
LSAgICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgZG9tYWluOiBsZW4oZG9tYWluLmNvbW1hbmRz
KSA+IDAsIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAgICAgICByZXR1
cm4gZmlsdGVyKGxhbWJkYSBkb21haW46IGxlbihzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9t
YWluKSkgPiAwLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKIAogICAgIGRl
ZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CiAgICAgICAgIHNlY29uZGFyeV9oZWFkZXJzID0gWwpA
QCAtOTIsMTIgKzkyLDE0IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgfQogICAgICAgICBpbXBsZW1lbnRh
dGlvbnMuYXBwZW5kKFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uRG9tYWluQ29uc3RydWN0b3IpLnN1YnN0aXR1dGUoTm9uZSwgKipjb25zdHJ1Y3Rv
cl9hcmdzKSkKIAotICAgICAgICBpZiBsZW4oZG9tYWluLmNvbW1hbmRzKSA8PSA1OgorICAgICAg
ICBjb21tYW5kcyA9IHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pCisKKyAgICAgICAg
aWYgbGVuKGNvbW1hbmRzKSA8PSA1OgogICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVu
ZChzZWxmLl9nZW5lcmF0ZV9zbWFsbF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9m
b3JfZG9tYWluKGRvbWFpbikpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpbXBsZW1lbnRh
dGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2xhcmdlX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxl
bWVudGF0aW9uX2Zvcl9kb21haW4oZG9tYWluKSkKIAotICAgICAgICBmb3IgY29tbWFuZCBpbiBk
b21haW4uY29tbWFuZHM6CisgICAgICAgIGZvciBjb21tYW5kIGluIGNvbW1hbmRzOgogICAgICAg
ICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlv
bnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2FzeW5jX2Rpc3BhdGNoZXJfY2xhc3NfZm9yX2RvbWFp
bihjb21tYW5kLCBkb21haW4pKQogICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKGNvbW1h
bmQsIGRvbWFpbikpCkBAIC0xMDUsMTAgKzEwNywxMiBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIHJldHVy
biBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuXG4nLmpvaW4oaW1w
bGVtZW50YXRpb25zKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9zd2l0
Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBjb21t
YW5kcyA9IHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pCisKICAgICAgICAgY2FzZXMg
PSBbXQotICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICBpZiAobWV0aG9kID09ICIlcyIpJyAlIGRv
bWFpbi5jb21tYW5kc1swXS5jb21tYW5kX25hbWUpCi0gICAgICAgIGNhc2VzLmFwcGVuZCgnICAg
ICAgICAlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOycgJSBkb21haW4uY29tbWFu
ZHNbMF0uY29tbWFuZF9uYW1lKQotICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFu
ZHNbMTpdOgorICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICBpZiAobWV0aG9kID09ICIlcyIpJyAl
IGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAg
ICVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmRzWzBdLmNvbW1h
bmRfbmFtZSkKKyAgICAgICAgZm9yIGNvbW1hbmQgaW4gY29tbWFuZHNbMTpdOgogICAgICAgICAg
ICAgY2FzZXMuYXBwZW5kKCcgICAgZWxzZSBpZiAobWV0aG9kID09ICIlcyIpJyAlIGNvbW1hbmQu
Y29tbWFuZF9uYW1lKQogICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVzKHJlcXVl
c3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lKQogCkBA
IC0xMjAsOCArMTI0LDEwIEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuIFRlbXBsYXRlKENwcFRl
bXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uU21hbGxTd2l0Y2gpLnN1YnN0
aXR1dGUoTm9uZSwgKipzd2l0Y2hfYXJncykKIAogICAgIGRlZiBfZ2VuZXJhdGVfbGFyZ2VfZGlz
cGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgor
ICAgICAgICBjb21tYW5kcyA9IHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pCisKICAg
ICAgICAgY2FzZXMgPSBbXQotICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6
CisgICAgICAgIGZvciBjb21tYW5kIGluIGNvbW1hbmRzOgogICAgICAgICAgICAgYXJncyA9IHsK
ICAgICAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKICAgICAg
ICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5CmluZGV4IGY1OWI5ODRlZDcyZmI3NGE2MzAyZTBlNWJhYmNiOTI2YmZl
MmU5MDguLmVkNThiMWUyZmM5YTFlNmIxZjM0NDgxNTJlZWY3ZmZmMjQ0M2Q1OGUgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTM5LDE0ICszOSwxNCBAQCBsb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcignZ2xvYmFsJykKIAogCiBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJH
ZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlu
cHV0X2ZpbGVwYXRoKToKLSAgICAgICAgQ3BwR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVs
LCBpbnB1dF9maWxlcGF0aCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdz
KToKKyAgICAgICAgQ3BwR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykK
IAogICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiAiJXNGcm9u
dGVuZERpc3BhdGNoZXJzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKIAogICAgIGRlZiBkb21h
aW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmlsdGVyKGxhbWJkYSBkb21h
aW46IGxlbihkb21haW4uZXZlbnRzKSA+IDAsIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRl
KHNlbGYpKQorICAgICAgICByZXR1cm4gZmlsdGVyKGxhbWJkYSBkb21haW46IGxlbihzZWxmLmV2
ZW50c19mb3JfZG9tYWluKGRvbWFpbikpID4gMCwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJh
dGUoc2VsZikpCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBoZWFk
ZXJzID0gWwpAQCAtOTAsOCArOTAsOSBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFk
ZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKIAogICAgICAgICB1c2VkX2VudW1fbmFtZXMgPSBz
ZXQoW10pCiAKKyAgICAgICAgZXZlbnRzID0gc2VsZi5ldmVudHNfZm9yX2RvbWFpbihkb21haW4p
CiAgICAgICAgIGV2ZW50X2RlY2xhcmF0aW9ucyA9IFtdCi0gICAgICAgIGZvciBldmVudCBpbiBk
b21haW4uZXZlbnRzOgorICAgICAgICBmb3IgZXZlbnQgaW4gZXZlbnRzOgogICAgICAgICAgICAg
ZXZlbnRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xh
cmF0aW9uX2Zvcl9ldmVudChldmVudCwgZG9tYWluLCB1c2VkX2VudW1fbmFtZXMpKQogCiAgICAg
ICAgIGhhbmRsZXJfYXJncyA9IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24ucHkKaW5kZXggNzE2NzJjNDZjMTA5ZDc1OTI0YzY5YTBiNmI1MzUyYzZkN2IwM2RjMi4uMGQw
ODA2OTAzOTMwNmUwMDZhMzhlODhhNTI4MTk5YTNkYzNhMzJmOSAxMDA3NTUKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTM4LDE0ICszOCwxNCBAQCBsb2cgPSBsb2dn
aW5nLmdldExvZ2dlcignZ2xvYmFsJykKIAogCiBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBDcHBHZW5lcmF0b3IuX19pbml0
X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAq
YXJncywgKiprd2FyZ3MpOgorICAgICAgICBDcHBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgKmFy
Z3MsICoqa3dhcmdzKQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKICAgICAgICAg
cmV0dXJuICIlc0Zyb250ZW5kRGlzcGF0Y2hlcnMuY3BwIiAlIHNlbGYucHJvdG9jb2xfbmFtZSgp
CiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZp
bHRlcihsYW1iZGEgZG9tYWluOiBsZW4oZG9tYWluLmV2ZW50cykgPiAwLCBHZW5lcmF0b3IuZG9t
YWluc190b19nZW5lcmF0ZShzZWxmKSkKKyAgICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgZG9t
YWluOiBsZW4oc2VsZi5ldmVudHNfZm9yX2RvbWFpbihkb21haW4pKSA+IDAsIEdlbmVyYXRvci5k
b21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxm
KToKICAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCkBAIC02OSw3ICs2OSw4IEBAIGNsYXNz
IENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6CiAKICAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9k
b21haW4oc2VsZiwgZG9tYWluKToKICAgICAgICAgaW1wbGVtZW50YXRpb25zID0gW10KLSAgICAg
ICAgZm9yIGV2ZW50IGluIGRvbWFpbi5ldmVudHM6CisgICAgICAgIGV2ZW50cyA9IHNlbGYuZXZl
bnRzX2Zvcl9kb21haW4oZG9tYWluKQorICAgICAgICBmb3IgZXZlbnQgaW4gZXZlbnRzOgogICAg
ICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uX2Zvcl9ldmVudChldmVudCwgZG9tYWluKSkKIAogICAgICAgICByZXR1
cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcblxuJy5qb2luKGlt
cGxlbWVudGF0aW9ucykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQppbmRleCAwNzA0YjNlMWUwZDFkYmI1Mjgz
YWI3YjZhZjYxNGIxMTkyMGI4MTY1Li4xZjkxY2RkMGY4ODc3NmE2YjhlNzU1MmU0YjAwYTE1YzRi
Y2U1MTMyIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkKQEAgLTQwLDggKzQwLDggQEAgbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKIAogY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdl
bmVyYXRvcihDcHBHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5w
dXRfZmlsZXBhdGgpOgotICAgICAgICBDcHBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWws
IGlucHV0X2ZpbGVwYXRoKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3Mp
OgorICAgICAgICBDcHBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQog
CiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKICAgICAgICAgcmV0dXJuICIlc1Byb3Rv
Y29sT2JqZWN0cy5oIiAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCkBAIC04Myw3ICs4Myw3IEBAIGNs
YXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAg
ICAgc2VjdGlvbnMgPSBbXQogCiAgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKLSAgICAg
ICAgICAgIGRlY2xhcmF0aW9uX3R5cGVzID0gW2RlY2wudHlwZSBmb3IgZGVjbCBpbiBkb21haW4u
dHlwZV9kZWNsYXJhdGlvbnNdCisgICAgICAgICAgICBkZWNsYXJhdGlvbl90eXBlcyA9IFtkZWNs
LnR5cGUgZm9yIGRlY2wgaW4gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFp
bildCiAgICAgICAgICAgICBvYmplY3RfdHlwZXMgPSBmaWx0ZXIobGFtYmRhIF90eXBlOiBpc2lu
c3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSwgZGVjbGFyYXRpb25fdHlwZXMpCiAgICAgICAgICAg
ICBlbnVtX3R5cGVzID0gZmlsdGVyKGxhbWJkYSBfdHlwZTogaXNpbnN0YW5jZShfdHlwZSwgRW51
bVR5cGUpLCBkZWNsYXJhdGlvbl90eXBlcykKICAgICAgICAgICAgIHNvcnRlZChvYmplY3RfdHlw
ZXMsIGtleT1tZXRob2RjYWxsZXIoJ3Jhd19uYW1lJykpCkBAIC0xMjEsOCArMTIxLDkgQEAgY2xh
c3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogLy8gRW5k
IG9mIHR5cGVkZWZzLiIiIiAlICdcblxuJy5qb2luKHNlY3Rpb25zKQogCiAgICAgZGVmIF9nZW5l
cmF0ZV90eXBlZGVmc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Ci0gICAgICAgIHByaW1pdGl2
ZV9kZWNsYXJhdGlvbnMgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IGlzaW5zdGFuY2UoZGVjbC50eXBl
LCBBbGlhc2VkVHlwZSksIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9ucykKLSAgICAgICAgYXJyYXlf
ZGVjbGFyYXRpb25zID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBpc2luc3RhbmNlKGRlY2wudHlwZSwg
QXJyYXlUeXBlKSwgZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKQorICAgICAgICB0eXBlX2RlY2xh
cmF0aW9ucyA9IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pCisgICAg
ICAgIHByaW1pdGl2ZV9kZWNsYXJhdGlvbnMgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IGlzaW5zdGFu
Y2UoZGVjbC50eXBlLCBBbGlhc2VkVHlwZSksIHR5cGVfZGVjbGFyYXRpb25zKQorICAgICAgICBh
cnJheV9kZWNsYXJhdGlvbnMgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IGlzaW5zdGFuY2UoZGVjbC50
eXBlLCBBcnJheVR5cGUpLCB0eXBlX2RlY2xhcmF0aW9ucykKICAgICAgICAgaWYgbGVuKHByaW1p
dGl2ZV9kZWNsYXJhdGlvbnMpID09IDAgYW5kIGxlbihhcnJheV9kZWNsYXJhdGlvbnMpID09IDA6
CiAgICAgICAgICAgICByZXR1cm4gJycKIApAQCAtMTc1LDcgKzE3Niw4IEBAIGNsYXNzIENwcFBy
b3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVy
YXRlX2J1aWxkZXJzX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKICAgICAgICAgc2VjdGlvbnMg
PSBbXQogCi0gICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xh
cmF0aW9uczoKKyAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRp
b25zX2Zvcl9kb21haW4oZG9tYWluKQorICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiB0
eXBlX2RlY2xhcmF0aW9uczoKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJh
dGlvbi50eXBlLCBFbnVtVHlwZSk6CiAgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNl
bGYuX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9u
KSkKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUsIE9i
amVjdFR5cGUpOgpAQCAtMzM2LDcgKzMzOCw4IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFk
ZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgdHlwZV9hcmd1bWVudHMgPSBbXQog
CiAgICAgICAgIGZvciBkb21haW4gaW4gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCk6Ci0gICAg
ICAgICAgICBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGUgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IHNl
bGYudHlwZV9uZWVkc19zaGFwZV9hc3NlcnRpb25zKGRlY2wudHlwZSksIGRvbWFpbi50eXBlX2Rl
Y2xhcmF0aW9ucykKKyAgICAgICAgICAgIHR5cGVfZGVjbGFyYXRpb25zID0gc2VsZi50eXBlX2Rl
Y2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbikKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uc190
b19nZW5lcmF0ZSA9IGZpbHRlcihsYW1iZGEgZGVjbDogc2VsZi50eXBlX25lZWRzX3NoYXBlX2Fz
c2VydGlvbnMoZGVjbC50eXBlKSwgdHlwZV9kZWNsYXJhdGlvbnMpCiAKICAgICAgICAgICAgIGZv
ciB0eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZToKICAgICAgICAg
ICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6
CkBAIC0zODUsNyArMzg4LDggQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRv
cihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2UodHlwZV9tZW1i
ZXIudHlwZSwgRW51bVR5cGUpIGFuZCB0eXBlX21lbWJlci50eXBlLmlzX2Fub255bW91cwogCiAg
ICAgICAgIGZvciBkb21haW4gaW4gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCk6Ci0gICAgICAg
ICAgICBkZWNsYXJhdGlvbl90eXBlcyA9IFtkZWNsLnR5cGUgZm9yIGRlY2wgaW4gZG9tYWluLnR5
cGVfZGVjbGFyYXRpb25zXQorICAgICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5
cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQorICAgICAgICAgICAgZGVjbGFyYXRp
b25fdHlwZXMgPSBbZGVjbC50eXBlIGZvciBkZWNsIGluIHR5cGVfZGVjbGFyYXRpb25zXQogICAg
ICAgICAgICAgb2JqZWN0X3R5cGVzID0gZmlsdGVyKGxhbWJkYSBfdHlwZTogaXNpbnN0YW5jZShf
dHlwZSwgT2JqZWN0VHlwZSksIGRlY2xhcmF0aW9uX3R5cGVzKQogICAgICAgICAgICAgZW51bV90
eXBlcyA9IGZpbHRlcihsYW1iZGEgX3R5cGU6IGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSwg
ZGVjbGFyYXRpb25fdHlwZXMpCiAgICAgICAgICAgICBpZiBsZW4ob2JqZWN0X3R5cGVzKSArIGxl
bihlbnVtX3R5cGVzKSA9PSAwOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxl
bWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4
IDdiYmI5MDMyN2M0NmI4YjhiNDZiYjA2MTFmYzY2ODRkYWY0OTliYzYuLmYzMDJhNzM0MmVhMmFl
Mzc3Mzk1YjQ0ZjY0YzRhZGQwMzRhNjIyYzMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBl
c19pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRp
b24ucHkKQEAgLTM5LDggKzM5LDggQEAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcp
CiAKIAogY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdl
bmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6
Ci0gICAgICAgIENwcEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBh
dGgpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIENw
cEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgb3V0
cHV0X2ZpbGVuYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gIiVzUHJvdG9jb2xPYmplY3RzLmNw
cCIgJSBzZWxmLnByb3RvY29sX25hbWUoKQpAQCAtMTE4LDcgKzExOCw4IEBAIGNsYXNzIENwcFBy
b3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAg
ICAgICAgXSkKICAgICAgICAgICAgIHJldHVybiBib2R5X2xpbmVzCiAKLSAgICAgICAgZGVjbGFy
YXRpb25fdHlwZXMgPSBbZGVjbC50eXBlIGZvciBkZWNsIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0
aW9uc10KKyAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRpb25z
X2Zvcl9kb21haW4oZG9tYWluKQorICAgICAgICBkZWNsYXJhdGlvbl90eXBlcyA9IFtkZWNsLnR5
cGUgZm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJhdGlvbnNdCiAgICAgICAgIG9iamVjdF90eXBlcyA9
IGZpbHRlcihsYW1iZGEgX3R5cGU6IGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpLCBkZWNs
YXJhdGlvbl90eXBlcykKICAgICAgICAgZW51bV90eXBlcyA9IGZpbHRlcihsYW1iZGEgX3R5cGU6
IGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSwgZGVjbGFyYXRpb25fdHlwZXMpCiAgICAgICAg
IGlmIGxlbihvYmplY3RfdHlwZXMpICsgbGVuKGVudW1fdHlwZXMpID09IDA6CkBAIC0xNTgsNyAr
MTU5LDggQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENw
cEdlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV9vcGVuX2ZpZWxkX25hbWVzKHNlbGYpOgog
ICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGZvciBkb21haW4gaW4gc2VsZi5kb21haW5zX3Rv
X2dlbmVyYXRlKCk6Ci0gICAgICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBmaWx0ZXIo
bGFtYmRhIGRlY2w6IEdlbmVyYXRvci50eXBlX2hhc19vcGVuX2ZpZWxkcyhkZWNsLnR5cGUpLCBk
b21haW4udHlwZV9kZWNsYXJhdGlvbnMpOgorICAgICAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMg
PSBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKQorICAgICAgICAgICAg
Zm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gZmlsdGVyKGxhbWJkYSBkZWNsOiBHZW5lcmF0b3IudHlw
ZV9oYXNfb3Blbl9maWVsZHMoZGVjbC50eXBlKSwgdHlwZV9kZWNsYXJhdGlvbnMpOgogICAgICAg
ICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiBzb3J0ZWQodHlwZV9kZWNsYXJhdGlvbi50eXBl
X21lbWJlcnMsIGtleT1sYW1iZGEgbWVtYmVyOiBtZW1iZXIubWVtYmVyX25hbWUpOgogICAgICAg
ICAgICAgICAgICAgICBmaWVsZF9uYW1lID0gJzo6Jy5qb2luKFsnSW5zcGVjdG9yJywgJ1Byb3Rv
Y29sJywgZG9tYWluLmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHR5cGVfZGVjbGFyYXRpb24udHlwZV9u
YW1lKSwgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSldKQogICAgICAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJ2NvbnN0IGNoYXIqICVzID0gIiVzIjsnICUgKGZpZWxkX25hbWUs
IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkKQEAgLTE2Nyw3ICsxNjksOCBAQCBjbGFzcyBDcHBQ
cm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKIAogICAg
IGRlZiBfZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgogICAgICAg
ICBzZWN0aW9ucyA9IFtdCi0gICAgICAgIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZSA9IGZpbHRl
cihsYW1iZGEgZGVjbDogc2VsZi50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBl
KSwgZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKQorICAgICAgICB0eXBlX2RlY2xhcmF0aW9ucyA9
IHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pCisgICAgICAgIGRlY2xh
cmF0aW9uc190b19nZW5lcmF0ZSA9IGZpbHRlcihsYW1iZGEgZGVjbDogc2VsZi50eXBlX25lZWRz
X3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKSwgdHlwZV9kZWNsYXJhdGlvbnMpCiAKICAgICAg
ICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlOgogICAg
ICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJz
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfanNfYmFja2VuZF9jb21tYW5kcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFu
ZHMucHkKaW5kZXggMzM5MmM3ODQ1OTNjOTE0N2NiZjg0NTY3YTgxNzU4MGM3Zjk2Y2IxZC4uNTRi
ZGFhZGJlOTllYmIxOGE3NjRjNTllYWY5MDMyMzc1OTY0ZWFlZSAxMDA3NTUKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfanNfYmFj
a2VuZF9jb21tYW5kcy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9qc19iYWNrZW5kX2NvbW1hbmRzLnB5CkBAIC0xLDYgKzEs
NiBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAjCi0jIENvcHlyaWdodCAoYykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoYykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtMzcsMTggKzM3LDE5IEBAIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQog
CiAKIGNsYXNzIEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yKEdlbmVyYXRvcik6Ci0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIEdlbmVyYXRv
ci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxm
LCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgogICAg
ICAgICByZXR1cm4gIkluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcyIKIAotICAgIGRlZiBkb21h
aW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICBkZWYgc2hvdWxkX2dlbmVyYXRlX2RvbWFp
bihkb21haW4pOgotICAgICAgICAgICAgZG9tYWluX2VudW1fdHlwZXMgPSBmaWx0ZXIobGFtYmRh
IGRlY2xhcmF0aW9uOiBpc2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIEVudW1UeXBlKSwgZG9t
YWluLnR5cGVfZGVjbGFyYXRpb25zKQotICAgICAgICAgICAgcmV0dXJuIGxlbihkb21haW4uY29t
bWFuZHMpID4gMCBvciBsZW4oZG9tYWluLmV2ZW50cykgPiAwIG9yIGxlbihkb21haW5fZW51bV90
eXBlcykgPiAwCisgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW4oc2VsZiwgZG9tYWluKToK
KyAgICAgICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9k
b21haW4oZG9tYWluKQorICAgICAgICBkb21haW5fZW51bV90eXBlcyA9IGZpbHRlcihsYW1iZGEg
ZGVjbGFyYXRpb246IGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpLCB0eXBl
X2RlY2xhcmF0aW9ucykKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLmNvbW1hbmRzX2Zvcl9kb21h
aW4oZG9tYWluKSkgPiAwIG9yIGxlbihzZWxmLmV2ZW50c19mb3JfZG9tYWluKGRvbWFpbikpID4g
MCBvciBsZW4oZG9tYWluX2VudW1fdHlwZXMpID4gMAogCi0gICAgICAgIHJldHVybiBmaWx0ZXIo
c2hvdWxkX2dlbmVyYXRlX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2Vs
ZikpCisgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBm
aWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19n
ZW5lcmF0ZShzZWxmKSkKIAogICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CiAgICAgICAg
IHNlY3Rpb25zID0gW10KQEAgLTY0LDExICs2NSwxNSBAQCBjbGFzcyBKU0JhY2tlbmRDb21tYW5k
c0dlbmVyYXRvcihHZW5lcmF0b3IpOgogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnLy8gJShkb21h
aW4pcy4nICUgYXJncykKIAotICAgICAgICBoYXNfYXN5bmNfY29tbWFuZHMgPSBhbnkobWFwKGxh
bWJkYSBjb21tYW5kOiBjb21tYW5kLmlzX2FzeW5jLCBkb21haW4uY29tbWFuZHMpKQotICAgICAg
ICBpZiBsZW4oZG9tYWluLmV2ZW50cykgPiAwIG9yIGhhc19hc3luY19jb21tYW5kczoKKyAgICAg
ICAgdHlwZV9kZWNsYXJhdGlvbnMgPSBzZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4o
ZG9tYWluKQorICAgICAgICBjb21tYW5kcyA9IHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21h
aW4pCisgICAgICAgIGV2ZW50cyA9IHNlbGYuZXZlbnRzX2Zvcl9kb21haW4oZG9tYWluKQorCisg
ICAgICAgIGhhc19hc3luY19jb21tYW5kcyA9IGFueShtYXAobGFtYmRhIGNvbW1hbmQ6IGNvbW1h
bmQuaXNfYXN5bmMsIGNvbW1hbmRzKSkKKyAgICAgICAgaWYgbGVuKGV2ZW50cykgPiAwIG9yIGhh
c19hc3luY19jb21tYW5kczoKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlciUoZG9tYWluKXNEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiJShkb21haW4pcyIp
OycgJSBhcmdzKQogCi0gICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNs
YXJhdGlvbnM6CisgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiB0eXBlX2RlY2xhcmF0aW9uczoK
ICAgICAgICAgICAgIGlmIGRlY2xhcmF0aW9uLnR5cGUuaXNfZW51bSgpOgogICAgICAgICAgICAg
ICAgIGVudW1fYXJncyA9IHsKICAgICAgICAgICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5k
b21haW5fbmFtZSwKQEAgLTkxLDcgKzk2LDcgQEAgY2xhc3MgSlNCYWNrZW5kQ29tbWFuZHNHZW5l
cmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgZGVmIGlzX2Fub255bW91c19lbnVtX3BhcmFtKHBh
cmFtKToKICAgICAgICAgICAgIHJldHVybiBpc2luc3RhbmNlKHBhcmFtLnR5cGUsIEVudW1UeXBl
KSBhbmQgcGFyYW0udHlwZS5pc19hbm9ueW1vdXMKIAotICAgICAgICBmb3IgZXZlbnQgaW4gZG9t
YWluLmV2ZW50czoKKyAgICAgICAgZm9yIGV2ZW50IGluIGV2ZW50czoKICAgICAgICAgICAgIGZv
ciBwYXJhbSBpbiBmaWx0ZXIoaXNfYW5vbnltb3VzX2VudW1fcGFyYW0sIGV2ZW50LmV2ZW50X3Bh
cmFtZXRlcnMpOgogICAgICAgICAgICAgICAgIGVudW1fYXJncyA9IHsKICAgICAgICAgICAgICAg
ICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFtZSwKQEAgLTEwNyw3ICsxMTIsNyBAQCBj
bGFzcyBKU0JhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICAgICAg
fQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZl
bnQoIiUoZG9tYWluKXMuJShldmVudE5hbWUpcyIsIFslKHBhcmFtcylzXSk7JyAlIGV2ZW50X2Fy
Z3MpCiAKLSAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgorICAgICAgICBm
b3IgY29tbWFuZCBpbiBjb21tYW5kczoKICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV9wYXJhbWV0
ZXJfb2JqZWN0KHBhcmFtZXRlcik6CiAgICAgICAgICAgICAgICAgb3B0aW9uYWxfc3RyaW5nID0g
InRydWUiIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlICJmYWxzZSIKICAgICAgICAgICAg
ICAgICBwYWlycyA9IFtdCkBAIC0xMjQsNyArMTI5LDcgQEAgY2xhc3MgSlNCYWNrZW5kQ29tbWFu
ZHNHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIiUoZG9tYWluKXMuJShj
b21tYW5kTmFtZSlzIiwgWyUoY2FsbFBhcmFtcylzXSwgWyUocmV0dXJuUGFyYW1zKXNdKTsnICUg
Y29tbWFuZF9hcmdzKQogCi0gICAgICAgIGlmIGRvbWFpbi5jb21tYW5kcyBvciBkb21haW4uZXZl
bnRzOgorICAgICAgICBpZiBjb21tYW5kcyBvciBldmVudHM6CiAgICAgICAgICAgICBhY3RpdmF0
ZV9hcmdzID0gewogICAgICAgICAgICAgICAgICdkb21haW4nOiBkb21haW4uZG9tYWluX25hbWUs
CiAgICAgICAgICAgICAgICAgJ2F2YWlsYWJpbGl0eSc6IGRvbWFpbi5hdmFpbGFiaWxpdHksCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggYTU1MmI0NmYyOWYzNTU2NjEwMDk3NTZkNzE3
YjFhNjE0N2EwYTIzYS4uMDUzMWVkNTNiZTdlOTJmMTYxMDA4MDBiNTkxZjgxYmY1N2UwZTUwZiAx
MDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
YmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtNDAsMTQgKzQwLDE0IEBAIGxvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCiAKIGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hl
ckhlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwg
bW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAgICAgT2JqQ0dlbmVyYXRvci5fX2luaXRfXyhz
ZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdz
LCAqKmt3YXJncyk6CisgICAgICAgIE9iakNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgKmFyZ3Ms
ICoqa3dhcmdzKQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKICAgICAgICAgcmV0
dXJuICclc0JhY2tlbmREaXNwYXRjaGVycy5oJyAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCiAKICAg
ICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIGZpbHRlcihP
YmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRl
cihzZWxmLm1vZGVsKCkpLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKyAg
ICAgICAgcmV0dXJuIGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9jb21tYW5kc19mb3JfZG9t
YWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKIAogICAgIGRlZiBnZW5l
cmF0ZV9vdXRwdXQoc2VsZik6CiAgICAgICAgIGhlYWRlcnMgPSBbCkBAIC03MSwxNiArNzEsMTcg
QEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0
b3IpOgogICAgIGRlZiBfZ2VuZXJhdGVfb2JqY19mb3J3YXJkX2RlY2xhcmF0aW9ucyhzZWxmKToK
ICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBmb3IgZG9tYWluIGluIHNlbGYuZG9tYWluc190
b19nZW5lcmF0ZSgpOgotICAgICAgICAgICAgaWYgZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAg
ICAgaWYgc2VsZi5jb21tYW5kc19mb3JfZG9tYWluKGRvbWFpbik6CiAgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCdAcHJvdG9jb2wgJXMlc0RvbWFpbkhhbmRsZXI7JyAlIChzZWxmLm9iamNf
cHJlZml4KCksIGRvbWFpbi5kb21haW5fbmFtZSkpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4o
bGluZXMpCiAKICAgICBkZWYgX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9y
X2RvbWFpbihzZWxmLCBkb21haW4pOgotICAgICAgICBpZiBub3QgZG9tYWluLmNvbW1hbmRzOgor
ICAgICAgICBjb21tYW5kcyA9IHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pCisgICAg
ICAgIGlmIG5vdCBjb21tYW5kczoKICAgICAgICAgICAgIHJldHVybiAnJwogCiAgICAgICAgIGNv
bW1hbmRfZGVjbGFyYXRpb25zID0gW10KLSAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNv
bW1hbmRzOgorICAgICAgICBmb3IgY29tbWFuZCBpbiBjb21tYW5kczoKICAgICAgICAgICAgIGNv
bW1hbmRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVj
bGFyYXRpb25fZm9yX2NvbW1hbmQoY29tbWFuZCkpCiAKICAgICAgICAgaGFuZGxlcl9hcmdzID0g
ewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCA5ZDVmMDM5
MWU1YTVlMmVhYmQyOTE1ZjFlMDZmMGIwZTExZTVkOWMwLi42OTM4Y2EzZTc0YWRiNDg2NGJjZGJl
ZDJiMTBlNzg2ZmVkNjhkY2E5IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weQpAQCAtMzksMTUgKzM5LDE1IEBAIGZyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVz
IGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIGxvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCiAKLWNsYXNzIE9iakNDb25maWd1cmF0aW9uSW1w
bGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Ci0gICAgICAgIE9iakNHZW5lcmF0b3IuX19pbml0
X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIE9iakNHZW5lcmF0b3IuX19pbml0
X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxm
KToKICAgICAgICAgcmV0dXJuICclc0JhY2tlbmREaXNwYXRjaGVycy5tbScgJSBzZWxmLnByb3Rv
Y29sX25hbWUoKQogCiAgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAg
IHJldHVybiBmaWx0ZXIoT2JqQ0dlbmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1h
bmRfaGFuZGxlcl9maWx0ZXIoc2VsZi5tb2RlbCgpKSwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2Vu
ZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBmaWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVf
Y29tbWFuZHNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikp
CiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBzZWNvbmRhcnlfaGVh
ZGVycyA9IFsKQEAgLTcwLDExICs3MCwxMyBAQCBjbGFzcyBPYmpDQ29uZmlndXJhdGlvbkltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gJ1xuXG4n
LmpvaW4oc2VjdGlvbnMpCiAKICAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfaW1wbGVtZW50YXRp
b25fZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgotICAgICAgICBpZiBub3QgZG9tYWluLmNvbW1h
bmRzOgorICAgICAgICBjb21tYW5kcyA9IHNlbGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4p
CisKKyAgICAgICAgaWYgbm90IGNvbW1hbmRzOgogICAgICAgICAgICAgcmV0dXJuICcnCiAKICAg
ICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMgPSBbXQotICAgICAgICBmb3IgY29tbWFuZCBpbiBk
b21haW4uY29tbWFuZHM6CisgICAgICAgIGZvciBjb21tYW5kIGluIGNvbW1hbmRzOgogICAgICAg
ICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJf
aW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQoZG9tYWluLCBjb21tYW5kKSkKIAogICAgICAgICBy
ZXR1cm4gJ1xuJy5qb2luKGNvbW1hbmRfZGVjbGFyYXRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19j
b25maWd1cmF0aW9uX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9oZWFkZXIucHkKaW5k
ZXggNWU5YzllMDAwODM4Mjk2NTNjNzJkMWQyMjdlYjRkMmEwOThlMzNjYi4uYTIzMmUyY2U0Mzlh
M2Q3NjNmYmZiOTRiOTE0YjZlN2RmZTQxYjcwYiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0
aW9uX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5CkBAIC0zNyw4
ICszNyw4IEBAIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCiAKIGNsYXNzIE9i
akNDb25maWd1cmF0aW9uSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBPYmpDR2VuZXJh
dG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgT2JqQ0dlbmVyYXRvci5fX2luaXRf
XyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYp
OgogICAgICAgICByZXR1cm4gJyVzQ29uZmlndXJhdGlvbi5oJyAlIHNlbGYucHJvdG9jb2xfbmFt
ZSgpCkBAIC01Miw5ICs1Miw2IEBAIGNsYXNzIE9iakNDb25maWd1cmF0aW9uSGVhZGVyR2VuZXJh
dG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsn
I2ltcG9ydCAnICsgaGVhZGVyIGZvciBoZWFkZXIgaW4gaGVhZGVyc10pLAogICAgICAgICB9CiAK
LSAgICAgICAgc2VsZi5fY29tbWFuZF9maWx0ZXIgPSBPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5l
cmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpCi0gICAgICAg
IHNlbGYuX2V2ZW50X2ZpbHRlciA9IE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFp
bl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpCi0KICAgICAgICAgZG9tYWlu
cyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCiAgICAgICAgIHNlY3Rpb25zID0gW10KICAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQpAQCAtODAsOCAr
NzcsOSBAQCBjbGFzcyBPYmpDQ29uZmlndXJhdGlvbkhlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJh
dG9yKToKICAgICAgICAgfQogCiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgaWYgZG9tYWlu
LmNvbW1hbmRzIGFuZCBzZWxmLl9jb21tYW5kX2ZpbHRlcihkb21haW4pOgorCisgICAgICAgIGlm
IHNlbGYuc2hvdWxkX2dlbmVyYXRlX2NvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKToKICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZChUZW1wbGF0ZShPYmpDVGVtcGxhdGVzLkNvbmZpZ3VyYXRpb25D
b21tYW5kUHJvcGVydHkpLnN1YnN0aXR1dGUoTm9uZSwgKipwcm9wZXJ0eV9hcmdzKSkKLSAgICAg
ICAgaWYgZG9tYWluLmV2ZW50cyBhbmQgc2VsZi5fZXZlbnRfZmlsdGVyKGRvbWFpbik6CisgICAg
ICAgIGlmIHNlbGYuc2hvdWxkX2dlbmVyYXRlX2V2ZW50c19mb3JfZG9tYWluKGRvbWFpbik6CiAg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoVGVtcGxhdGUoT2JqQ1RlbXBsYXRlcy5Db25maWd1cmF0
aW9uRXZlbnRQcm9wZXJ0eSkuc3Vic3RpdHV0ZShOb25lLCAqKnByb3BlcnR5X2FyZ3MpKQogICAg
ICAgICByZXR1cm4gbGluZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9pbXBsZW1l
bnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamNfY29uZmlndXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCAy
YTQ4MjJkZmMyZTcxZGJmMTVlZmU4MjY2ZjIwMTM1YzQ3OWZlNTQwLi45MTBiY2JhYjEzNTBkMDc2
ZTk1ZTUzZGMwYWI5OGRjNDdiMmJjZDM0IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25f
aW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2ltcGxlbWVudGF0aW9u
LnB5CkBAIC0zNiw5ICszNiw5IEBAIGZyb20gb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9y
dCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIGxvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKCdnbG9iYWwnKQogCiAKLWNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBPYmpDR2VuZXJhdG9yLl9faW5pdF9f
KHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKK2NsYXNzIE9iakNDb25maWd1cmF0aW9uSW1w
bGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIE9iakNHZW5lcmF0b3IuX19pbml0X18oc2Vs
ZiwgKmFyZ3MsICoqa3dhcmdzKQogCiAgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKICAg
ICAgICAgcmV0dXJuICclc0NvbmZpZ3VyYXRpb24ubW0nICUgc2VsZi5wcm90b2NvbF9uYW1lKCkK
QEAgLTU4LDkgKzU4LDYgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAgICAnc2Vjb25kYXJ5SW5jbHVk
ZXMnOiAnXG4nLmpvaW4oWycjaW1wb3J0ICVzJyAlIGhlYWRlciBmb3IgaGVhZGVyIGluIHNlY29u
ZGFyeV9oZWFkZXJzXSksCiAgICAgICAgIH0KIAotICAgICAgICBzZWxmLl9jb21tYW5kX2ZpbHRl
ciA9IE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl9jb21tYW5kX2hhbmRsZXJf
ZmlsdGVyKHNlbGYubW9kZWwoKSkKLSAgICAgICAgc2VsZi5fZXZlbnRfZmlsdGVyID0gT2JqQ0dl
bmVyYXRvci5zaG91bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJfZmlsdGVyKHNl
bGYubW9kZWwoKSkKLQogICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRl
KCkKICAgICAgICAgc2VjdGlvbnMgPSBbXQogICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5n
ZW5lcmF0ZV9saWNlbnNlKCkpCkBAIC05MCwxMCArODcsMTAgQEAgY2xhc3MgT2JqQ0JhY2tlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAg
IGxpbmVzLmV4dGVuZChzZWxmLl9nZW5lcmF0ZV9kZWFsbG9jKGRvbWFpbnMpKQogICAgICAgICBs
aW5lcy5hcHBlbmQoJycpCiAgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKLSAgICAgICAg
ICAgIGlmIGRvbWFpbi5jb21tYW5kcyBhbmQgc2VsZi5fY29tbWFuZF9maWx0ZXIoZG9tYWluKToK
KyAgICAgICAgICAgIGlmIHNlbGYuc2hvdWxkX2dlbmVyYXRlX2NvbW1hbmRzX2Zvcl9kb21haW4o
ZG9tYWluKToKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaGFu
ZGxlcl9zZXR0ZXJfZm9yX2RvbWFpbihkb21haW4pKQogICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnJykKLSAgICAgICAgICAgIGlmIGRvbWFpbi5ldmVudHMgYW5kIHNlbGYuX2V2ZW50X2Zp
bHRlcihkb21haW4pOgorICAgICAgICAgICAgaWYgc2VsZi5zaG91bGRfZ2VuZXJhdGVfZXZlbnRz
X2Zvcl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9nZXR0ZXJfZm9yX2RvbWFpbihkb21haW4pKQogICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5k
JykKQEAgLTEwMiwxMSArOTksMTEgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV9pdmFy
cyhzZWxmLCBkb21haW5zKToKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBmb3IgZG9tYWlu
IGluIGRvbWFpbnM6Ci0gICAgICAgICAgICBpZiBkb21haW4uY29tbWFuZHMgYW5kIHNlbGYuX2Nv
bW1hbmRfZmlsdGVyKGRvbWFpbik6CisgICAgICAgICAgICBpZiBzZWxmLnNob3VsZF9nZW5lcmF0
ZV9jb21tYW5kc19mb3JfZG9tYWluKGRvbWFpbik6CiAgICAgICAgICAgICAgICAgb2JqY19jbGFz
c19uYW1lID0gJyVzJXNEb21haW5IYW5kbGVyJyAlIChzZWxmLm9iamNfcHJlZml4KCksIGRvbWFp
bi5kb21haW5fbmFtZSkKICAgICAgICAgICAgICAgICBpdmFyX25hbWUgPSAnXyVzSGFuZGxlcicg
JSBPYmpDR2VuZXJhdG9yLnZhcmlhYmxlX25hbWVfcHJlZml4X2Zvcl9kb21haW4oZG9tYWluKQog
ICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlkPCVzPiAlczsnICUgKG9iamNfY2xh
c3NfbmFtZSwgaXZhcl9uYW1lKSkKLSAgICAgICAgICAgIGlmIGRvbWFpbi5ldmVudHMgYW5kIHNl
bGYuX2V2ZW50X2ZpbHRlcihkb21haW4pOgorICAgICAgICAgICAgaWYgc2VsZi5zaG91bGRfZ2Vu
ZXJhdGVfZXZlbnRzX2Zvcl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgICAgICBvYmpjX2Ns
YXNzX25hbWUgPSAnJXMlc0RvbWFpbkV2ZW50RGlzcGF0Y2hlcicgJSAoc2VsZi5vYmpjX3ByZWZp
eCgpLCBkb21haW4uZG9tYWluX25hbWUpCiAgICAgICAgICAgICAgICAgaXZhcl9uYW1lID0gJ18l
c0V2ZW50RGlzcGF0Y2hlcicgJSBPYmpDR2VuZXJhdG9yLnZhcmlhYmxlX25hbWVfcHJlZml4X2Zv
cl9kb21haW4oZG9tYWluKQogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzICol
czsnICUgKG9iamNfY2xhc3NfbmFtZSwgaXZhcl9uYW1lKSkKQEAgLTExNyw5ICsxMTQsOSBAQCBj
bGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2Vu
ZXJhdG9yKToKICAgICAgICAgbGluZXMuYXBwZW5kKCctICh2b2lkKWRlYWxsb2MnKQogICAgICAg
ICBsaW5lcy5hcHBlbmQoJ3snKQogICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6Ci0gICAg
ICAgICAgICBpZiBkb21haW4uY29tbWFuZHMgYW5kIHNlbGYuX2NvbW1hbmRfZmlsdGVyKGRvbWFp
bik6CisgICAgICAgICAgICBpZiBzZWxmLnNob3VsZF9nZW5lcmF0ZV9jb21tYW5kc19mb3JfZG9t
YWluKGRvbWFpbik6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgW18lc0hhbmRs
ZXIgcmVsZWFzZV07JyAlIE9iakNHZW5lcmF0b3IudmFyaWFibGVfbmFtZV9wcmVmaXhfZm9yX2Rv
bWFpbihkb21haW4pKQotICAgICAgICAgICAgaWYgZG9tYWluLmV2ZW50cyBhbmQgc2VsZi5fZXZl
bnRfZmlsdGVyKGRvbWFpbik6CisgICAgICAgICAgICBpZiBzZWxmLnNob3VsZF9nZW5lcmF0ZV9l
dmVudHNfZm9yX2RvbWFpbihkb21haW4pOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIFtfJXNFdmVudERpc3BhdGNoZXIgcmVsZWFzZV07JyAlIE9iakNHZW5lcmF0b3IudmFyaWFi
bGVfbmFtZV9wcmVmaXhfZm9yX2RvbWFpbihkb21haW4pKQogICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBbc3VwZXIgZGVhbGxvY107JykKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
ZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCAxNDA3YTYwYWI2ODcw
MjU3MjgxZTgwYTVjMDFmNmRmMjJlZDNlYjVhLi43MjJkNWQzOTIyZjhiOTRjMzZlOTVjNzc0ZjY4
ZTdjMmRjOTE1NWY2IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
LnB5CkBAIC0zOCwxNCArMzgsMTQgQEAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcp
CiAKIAogY2xhc3MgT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
KE9iakNHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmls
ZXBhdGgpOgotICAgICAgICBPYmpDR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1
dF9maWxlcGF0aCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAg
ICAgICAgT2JqQ0dlbmVyYXRvci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAg
ICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gJyVzRXZlbnREaXNw
YXRjaGVycy5tbScgJSBzZWxmLnByb3RvY29sX25hbWUoKQogCiAgICAgZGVmIGRvbWFpbnNfdG9f
Z2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBmaWx0ZXIoT2JqQ0dlbmVyYXRvci5zaG91
bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJfZmlsdGVyKHNlbGYubW9kZWwoKSks
IEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorICAgICAgICByZXR1cm4gZmls
dGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX2V2ZW50c19mb3JfZG9tYWluLCBHZW5lcmF0b3IuZG9t
YWluc190b19nZW5lcmF0ZShzZWxmKSkKIAogICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6
CiAgICAgICAgIHNlY29uZGFyeV9oZWFkZXJzID0gWwpAQCAtNjcsNyArNjcsNyBAQCBjbGFzcyBP
YmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRv
cik6CiAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKIAogICAgIGRlZiBfZ2Vu
ZXJhdGVfZXZlbnRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnMoc2VsZiwgZG9tYWluKToKLSAg
ICAgICAgaWYgbm90IGRvbWFpbi5ldmVudHM6CisgICAgICAgIGlmIG5vdCBzZWxmLnNob3VsZF9n
ZW5lcmF0ZV9ldmVudHNfZm9yX2RvbWFpbihkb21haW4pOgogICAgICAgICAgICAgcmV0dXJuICcn
CiAKICAgICAgICAgbGluZXMgPSBbXQpAQCAtODcsNyArODcsNyBAQCBjbGFzcyBPYmpDRnJvbnRl
bmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIHJldHVybiBzZWxmOycpCiAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnfScpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgZm9yIGV2ZW50IGluIGRv
bWFpbi5ldmVudHM6CisgICAgICAgIGZvciBldmVudCBpbiBzZWxmLmV2ZW50c19mb3JfZG9tYWlu
KGRvbWFpbik6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZXZlbnQo
ZG9tYWluLCBldmVudCkpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAgICAgIGxp
bmVzLmFwcGVuZCgnQGVuZCcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2hlYWRlci5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaGVh
ZGVyLnB5CmluZGV4IGY1YmE3YWJhZmIxMzE0YzdjZDhhYjI4OGQwMTc2Y2YzMmRkMmFiYzMuLjJl
NTJmZTZlN2M0ZDY0MjQzNzkwY2Y1MTU3MDAyYjYyOWNmNGUwZGUgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
aGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX29iamNfaGVhZGVyLnB5CkBAIC00NCw4ICs0NCw4IEBAIGRlZiBhZGRf
bmV3bGluZShsaW5lcyk6CiAKIAogY2xhc3MgT2JqQ0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJh
dG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAg
ICAgICAgT2JqQ0dlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgp
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIE9iakNH
ZW5lcmF0b3IuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQogCiAgICAgZGVmIG91dHB1
dF9maWxlbmFtZShzZWxmKToKICAgICAgICAgcmV0dXJuICclcy5oJyAlIHNlbGYucHJvdG9jb2xf
bmFtZSgpCkBAIC02MCw5ICs2MCw5IEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dl
bmVyYXRvcik6CiAgICAgICAgIH0KIAogICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3Rv
X2dlbmVyYXRlKCkKLSAgICAgICAgdHlwZV9kb21haW5zID0gZmlsdGVyKE9iakNHZW5lcmF0b3Iu
c2hvdWxkX2dlbmVyYXRlX2RvbWFpbl90eXBlc19maWx0ZXIoc2VsZi5tb2RlbCgpKSwgZG9tYWlu
cykKLSAgICAgICAgY29tbWFuZF9kb21haW5zID0gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxk
X2dlbmVyYXRlX2RvbWFpbl9jb21tYW5kX2hhbmRsZXJfZmlsdGVyKHNlbGYubW9kZWwoKSksIGRv
bWFpbnMpCi0gICAgICAgIGV2ZW50X2RvbWFpbnMgPSBmaWx0ZXIoT2JqQ0dlbmVyYXRvci5zaG91
bGRfZ2VuZXJhdGVfZG9tYWluX2V2ZW50X2Rpc3BhdGNoZXJfZmlsdGVyKHNlbGYubW9kZWwoKSks
IGRvbWFpbnMpCisgICAgICAgIHR5cGVfZG9tYWlucyA9IGZpbHRlcihzZWxmLnNob3VsZF9nZW5l
cmF0ZV90eXBlc19mb3JfZG9tYWluLCBkb21haW5zKQorICAgICAgICBjb21tYW5kX2RvbWFpbnMg
PSBmaWx0ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfY29tbWFuZHNfZm9yX2RvbWFpbiwgZG9tYWlu
cykKKyAgICAgICAgZXZlbnRfZG9tYWlucyA9IGZpbHRlcihzZWxmLnNob3VsZF9nZW5lcmF0ZV9l
dmVudHNfZm9yX2RvbWFpbiwgZG9tYWlucykKIAogICAgICAgICAjIEZJWE1FOiA8aHR0cHM6Ly93
ZWJraXQub3JnL2IvMTM4MjIyPiBXZWIgSW5zcGVjdG9yOiBSZWR1Y2UgdW5uZWNlc3NhcnkgZW51
bXMvdHlwZXMgZ2VuZXJhdGVkIGluIE9iakMgUHJvdG9jb2wgSW50ZXJmYWNlcwogICAgICAgICAj
IEN1cnJlbnRseSB3ZSBnZW5lcmF0ZSBlbnVtcy90eXBlcyBmb3IgYWxsIHR5cGVzIGluIHRoZSB0
eXBlX2RvbWFpbnMuIEZvciB0aGUgYnVpbHQtaW4KQEAgLTg1LDcgKzg1LDcgQEAgY2xhc3MgT2Jq
Q0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKIAogICAgIGRlZiBfZ2VuZXJhdGVfZm9y
d2FyZF9kZWNsYXJhdGlvbnMoc2VsZiwgZG9tYWluKToKICAgICAgICAgbGluZXMgPSBbXQotICAg
ICAgICBmb3IgZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAg
ICBmb3IgZGVjbGFyYXRpb24gaW4gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRv
bWFpbik6CiAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBPYmpl
Y3RUeXBlKSk6CiAgICAgICAgICAgICAgICAgb2JqY19uYW1lID0gc2VsZi5vYmpjX25hbWVfZm9y
X3R5cGUoZGVjbGFyYXRpb24udHlwZSkKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0Bj
bGFzcyAlczsnICUgb2JqY19uYW1lKQpAQCAtOTUsNyArOTUsNyBAQCBjbGFzcyBPYmpDSGVhZGVy
R2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBsaW5lcyA9IFtdCiAKICAgICAgICAg
IyBUeXBlIGVudW1zIGFuZCBtZW1iZXIgZW51bXMuCi0gICAgICAgIGZvciBkZWNsYXJhdGlvbiBp
biBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBz
ZWxmLnR5cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpOgogICAgICAgICAgICAgICAg
IGFkZF9uZXdsaW5lKGxpbmVzKQogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9n
ZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlv
bikpCkBAIC0xMDYsNyArMTA2LDcgQEAgY2xhc3MgT2JqQ0hlYWRlckdlbmVyYXRvcihPYmpDR2Vu
ZXJhdG9yKToKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5l
cmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfbWVtYmVyKGRvbWFpbiwgZGVjbGFyYXRpb24sIG1lbWJl
cikpCiAKICAgICAgICAgIyBBbm9ueW1vdXMgY29tbWFuZCBlbnVtcy4KLSAgICAgICAgZm9yIGNv
bW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgorICAgICAgICBmb3IgY29tbWFuZCBpbiBzZWxmLmNv
bW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4g
Y29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShw
YXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXM6
CiAgICAgICAgICAgICAgICAgICAgIGFkZF9uZXdsaW5lKGxpbmVzKQpAQCAtMTE3LDcgKzExNyw3
IEBAIGNsYXNzIE9iakNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3Jf
cGFyYW1ldGVyKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikpCiAKICAg
ICAgICAgIyBBbm9ueW1vdXMgZXZlbnQgZW51bXMuCi0gICAgICAgIGZvciBldmVudCBpbiBkb21h
aW4uZXZlbnRzOgorICAgICAgICBmb3IgZXZlbnQgaW4gc2VsZi5ldmVudHNfZm9yX2RvbWFpbihk
b21haW4pOgogICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0
ZXJzOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1U
eXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzOgogICAgICAgICAgICAgICAgICAg
ICBhZGRfbmV3bGluZShsaW5lcykKQEAgLTEyOCw3ICsxMjgsNyBAQCBjbGFzcyBPYmpDSGVhZGVy
R2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgIGRlZiBfZ2VuZXJhdGVfdHlwZXMoc2VsZiwg
ZG9tYWluKToKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICAjIFR5cGUgaW50ZXJmYWNlcy4K
LSAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAg
ICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFp
bihkb21haW4pOgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBlLCBP
YmplY3RUeXBlKToKICAgICAgICAgICAgICAgICBhZGRfbmV3bGluZShsaW5lcykKICAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdHlwZV9pbnRlcmZhY2UoZG9tYWlu
LCBkZWNsYXJhdGlvbikpCkBAIC0xOTIsMTEgKzE5MiwxMSBAQCBjbGFzcyBPYmpDSGVhZGVyR2Vu
ZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogCiAgICAgZGVmIF9nZW5lcmF0ZV9jb21tYW5kX3Byb3Rv
Y29scyhzZWxmLCBkb21haW4pOgogICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGlmIGRvbWFp
bi5jb21tYW5kczoKKyAgICAgICAgaWYgc2VsZi5jb21tYW5kc19mb3JfZG9tYWluKGRvbWFpbik6
CiAgICAgICAgICAgICBvYmpjX25hbWUgPSAnJXMlc0RvbWFpbkhhbmRsZXInICUgKHNlbGYub2Jq
Y19wcmVmaXgoKSwgZG9tYWluLmRvbWFpbl9uYW1lKQogICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCdAcHJvdG9jb2wgJXMgPE5TT2JqZWN0PicgJSBvYmpjX25hbWUpCiAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJ0ByZXF1aXJlZCcpCi0gICAgICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4u
Y29tbWFuZHM6CisgICAgICAgICAgICBmb3IgY29tbWFuZCBpbiBzZWxmLmNvbW1hbmRzX2Zvcl9k
b21haW4oZG9tYWluKToKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfc2luZ2xlX2NvbW1hbmRfcHJvdG9jb2woZG9tYWluLCBjb21tYW5kKSkKICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnQGVuZCcpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCkBA
IC0yMTgsMTEgKzIxOCwxMiBAQCBjbGFzcyBPYmpDSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0
b3IpOgogCiAgICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9pbnRlcmZhY2VzKHNlbGYsIGRvbWFpbik6
CiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgaWYgZG9tYWluLmV2ZW50czoKKyAgICAgICAg
ZXZlbnRzID0gc2VsZi5ldmVudHNfZm9yX2RvbWFpbihkb21haW4pCisgICAgICAgIGlmIGxlbihl
dmVudHMpOgogICAgICAgICAgICAgb2JqY19uYW1lID0gJyVzJXNEb21haW5FdmVudERpc3BhdGNo
ZXInICUgKHNlbGYub2JqY19wcmVmaXgoKSwgZG9tYWluLmRvbWFpbl9uYW1lKQogICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCdfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkn
KQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAaW50ZXJmYWNlICVzIDogTlNPYmplY3QnICUg
b2JqY19uYW1lKQotICAgICAgICAgICAgZm9yIGV2ZW50IGluIGRvbWFpbi5ldmVudHM6CisgICAg
ICAgICAgICBmb3IgZXZlbnQgaW4gZXZlbnRzOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZChzZWxmLl9nZW5lcmF0ZV9zaW5nbGVfZXZlbnRfaW50ZXJmYWNlKGRvbWFpbiwgZXZlbnQpKQog
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdAZW5kJykKICAgICAgICAgcmV0dXJuICdcbicuam9p
bihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfaW50ZXJuYWxfaGVhZGVyLnB5IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19pbnRl
cm5hbF9oZWFkZXIucHkKaW5kZXggNDcwMDZjZmM1ZGJmN2YxMzI3MzQ3YjJlMjE3NzVhYjJiMjZj
YjRjMS4uOWYwNmNlZDQwMjQ5MGExNTE0ZTUzNDZjNWQzYzhiZTIwODhmOGJjZiAxMDA3NTUKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfb2JqY19pbnRlcm5hbF9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19pbnRlcm5hbF9oZWFkZXIucHkK
QEAgLTM3LDggKzM3LDggQEAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKIAog
Y2xhc3MgT2JqQ0ludGVybmFsSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBPYmpDR2Vu
ZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgT2JqQ0dlbmVyYXRvci5fX2lu
aXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNl
bGYpOgogICAgICAgICByZXR1cm4gJyVzSW50ZXJuYWwuaCcgJSBzZWxmLnByb3RvY29sX25hbWUo
KQpAQCAtNTUsOCArNTUsNyBAQCBjbGFzcyBPYmpDSW50ZXJuYWxIZWFkZXJHZW5lcmF0b3IoT2Jq
Q0dlbmVyYXRvcik6CiAgICAgICAgICAgICAnaW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW1wb3J0
ICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBzb3J0ZWQoaGVhZGVycyldKSwKICAgICAgICAgfQog
Ci0gICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQotICAgICAgICBl
dmVudF9kb21haW5zID0gZmlsdGVyKE9iakNHZW5lcmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFp
bl9ldmVudF9kaXNwYXRjaGVyX2ZpbHRlcihzZWxmLm1vZGVsKCkpLCBkb21haW5zKQorICAgICAg
ICBldmVudF9kb21haW5zID0gZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX2V2ZW50c19mb3Jf
ZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkKIAogICAgICAgICBzZWN0aW9ucyA9
IFtdCiAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKQEAg
LTY3LDcgKzY2LDcgQEAgY2xhc3MgT2JqQ0ludGVybmFsSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5l
cmF0b3IpOgogCiAgICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9kaXNwYXRjaGVyX3ByaXZhdGVfaW50
ZXJmYWNlcyhzZWxmLCBkb21haW4pOgogICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGlmIGRv
bWFpbi5ldmVudHM6CisgICAgICAgIGlmIGxlbihzZWxmLmV2ZW50c19mb3JfZG9tYWluKGRvbWFp
bikpOgogICAgICAgICAgICAgb2JqY19uYW1lID0gJyVzJXNEb21haW5FdmVudERpc3BhdGNoZXIn
ICUgKHNlbGYub2JqY19wcmVmaXgoKSwgZG9tYWluLmRvbWFpbl9uYW1lKQogICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCdAaW50ZXJmYWNlICVzIChQcml2YXRlKScgJSBvYmpjX25hbWUpCiAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6
KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOycp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lvbnNfaGVhZGVyLnB5IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2hlYWRlci5weQppbmRleCA1NWRhYmY0NmU5
ZTUzZTUyZjNiZTQ5ZWY2ZGZmOWFkMDA1N2MyZmE4Li45N2ZlMGE1OTRhMmQwNWJhZTU3MDE1NzJi
OWU3ODI4YzcxNTRmNjhhIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVfY29udmVyc2lv
bnNfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19oZWFkZXIu
cHkKQEAgLTQ0LDE0ICs0NCwxNCBAQCBkZWYgYWRkX25ld2xpbmUobGluZXMpOgogCiAKIGNsYXNz
IE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0hlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9y
KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKLSAgICAg
ICAgT2JqQ0dlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIE9iakNHZW5l
cmF0b3IuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQogCiAgICAgZGVmIG91dHB1dF9m
aWxlbmFtZShzZWxmKToKICAgICAgICAgcmV0dXJuICclc1R5cGVDb252ZXJzaW9ucy5oJyAlIHNl
bGYucHJvdG9jb2xfbmFtZSgpCiAKICAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToK
LSAgICAgICAgcmV0dXJuIGZpbHRlcihPYmpDR2VuZXJhdG9yLnNob3VsZF9nZW5lcmF0ZV9kb21h
aW5fdHlwZXNfZmlsdGVyKHNlbGYubW9kZWwoKSksIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVy
YXRlKHNlbGYpKQorICAgICAgICByZXR1cm4gZmlsdGVyKHNlbGYuc2hvdWxkX2dlbmVyYXRlX3R5
cGVzX2Zvcl9kb21haW4sIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQogCiAg
ICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKICAgICAgICAgaGVhZGVycyA9IFsKQEAgLTc3
LDcgKzc3LDcgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSGVhZGVyR2VuZXJh
dG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBsaW5lcyA9IFtdCiAKICAgICAgICAgIyBUeXBl
IGVudW1zIGFuZCBtZW1iZXIgZW51bXMuCi0gICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21h
aW4udHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBzZWxmLnR5
cGVfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpOgogICAgICAgICAgICAgICAgIGFkZF9u
ZXdsaW5lKGxpbmVzKQogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9hbm9ueW1vdXNfZW51bV9jb252ZXJzaW9uX2Zvcl9kZWNsYXJhdGlvbihkb21haW4sIGRlY2xh
cmF0aW9uKSkKQEAgLTg4LDcgKzg4LDcgQEAgY2xhc3MgT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNp
b25zSGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2NvbnZlcnNpb25f
Zm9yX21lbWJlcihkb21haW4sIGRlY2xhcmF0aW9uLCBtZW1iZXIpKQogCiAgICAgICAgICMgQW5v
bnltb3VzIGNvbW1hbmQgZW51bXMuCi0gICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21t
YW5kczoKKyAgICAgICAgZm9yIGNvbW1hbmQgaW4gc2VsZi5jb21tYW5kc19mb3JfZG9tYWluKGRv
bWFpbik6CiAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0
ZXJzOgogICAgICAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVt
VHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91cyk6CiAgICAgICAgICAgICAgICAg
ICAgIGFkZF9uZXdsaW5lKGxpbmVzKQpAQCAtOTksNyArOTksNyBAQCBjbGFzcyBPYmpDUHJvdG9j
b2xUeXBlQ29udmVyc2lvbnNIZWFkZXJHZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9j
b252ZXJzaW9uX2Zvcl9wYXJhbWV0ZXIoZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFy
YW1ldGVyKSkKIAogICAgICAgICAjIEFub255bW91cyBldmVudCBlbnVtcy4KLSAgICAgICAgZm9y
IGV2ZW50IGluIGRvbWFpbi5ldmVudHM6CisgICAgICAgIGZvciBldmVudCBpbiBzZWxmLmV2ZW50
c19mb3JfZG9tYWluKGRvbWFpbik6CiAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50
LmV2ZW50X3BhcmFtZXRlcnM6CiAgICAgICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UocGFyYW1l
dGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzKToKICAg
ICAgICAgICAgICAgICAgICAgYWRkX25ld2xpbmUobGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3By
b3RvY29sX3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX3Byb3RvY29s
X3R5cGVfY29udmVyc2lvbnNfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggOTcyMmFhNGFlY2U0MTEx
YmQ5YmYxMTI1OWIxMjU4MWE3MDIyZDM0MC4uYjUxZmY1NjVmNDNmMmY5YWQ5NDUzNjk2MzgwZmMz
NmVhNjdhNTI1OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlX2NvbnZlcnNpb25zX2lt
cGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZV9jb252ZXJzaW9uc19pbXBs
ZW1lbnRhdGlvbi5weQpAQCAtNDMsMTQgKzQzLDE0IEBAIGRlZiBhZGRfbmV3bGluZShsaW5lcyk6
CiAKIAogY2xhc3MgT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSW1wbGVtZW50YXRpb25HZW5l
cmF0b3IoT2JqQ0dlbmVyYXRvcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1
dF9maWxlcGF0aCk6Ci0gICAgICAgIE9iakNHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWws
IGlucHV0X2ZpbGVwYXRoKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3Mp
OgorICAgICAgICBPYmpDR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykK
IAogICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiAnJXNUeXBl
Q29udmVyc2lvbnMubW0nICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKIAogICAgIGRlZiBkb21haW5z
X3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmlsdGVyKE9iakNHZW5lcmF0b3Iu
c2hvdWxkX2dlbmVyYXRlX2RvbWFpbl90eXBlc19maWx0ZXIoc2VsZi5tb2RlbCgpKSwgR2VuZXJh
dG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBmaWx0ZXIoc2Vs
Zi5zaG91bGRfZ2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNfdG9f
Z2VuZXJhdGUoc2VsZikpCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAg
ICBzZWNvbmRhcnlfaGVhZGVycyA9IFsKQEAgLTgwLDcgKzgwLDcgQEAgY2xhc3MgT2JqQ1Byb3Rv
Y29sVHlwZUNvbnZlcnNpb25zSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6
CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BpbnRlcmZhY2UgJXNUeXBlQ29udmVyc2lvbnMg
KCVzRG9tYWluKScgJSAoc2VsZi5wcm90b2NvbF9uYW1lKCksIGRvbWFpbi5kb21haW5fbmFtZSkp
CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAKLSAgICAgICAgICAgIGZvciBkZWNsYXJh
dGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAgICAgICBmb3IgZGVjbGFy
YXRpb24gaW4gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbik6CiAgICAg
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9tZXRo
b2RfZGVjbGFyYXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCiAKICAgICAgICAgICAgIGFkZF9u
ZXdsaW5lKGxpbmVzKQpAQCAtMTA0LDcgKzEwNCw3IEBAIGNsYXNzIE9iakNQcm90b2NvbFR5cGVD
b252ZXJzaW9uc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCdAaW1wbGVtZW50YXRpb24gJXNUeXBlQ29udmVyc2lvbnMgKCVz
RG9tYWluKScgJSAoc2VsZi5wcm90b2NvbF9uYW1lKCksIGRvbWFpbi5kb21haW5fbmFtZSkpCiAg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAKLSAgICAgICAgICAgIGZvciBkZWNsYXJhdGlv
biBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAgICAgICBmb3IgZGVjbGFyYXRp
b24gaW4gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRvbWFpbik6CiAgICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVfZmFjdG9yeV9tZXRob2Rf
aW1wbGVtZW50YXRpb24oZG9tYWluLCBkZWNsYXJhdGlvbikpCiAgICAgICAgICAgICAgICAgYWRk
X25ld2xpbmUobGluZXMpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0BlbmQnKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfcHJvdG9j
b2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggMzY2M2Q2ZDhlM2Q3NDQ4N2M2YzY1NjNi
YjBmZmRiNjU4NDI2OWEyYi4uY2U5YWUzNDk5YTI2NzI2ODEzNDgwNzc1ZTVmY2Y1MjY4ODc4MzA3
YiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CkBAIC00NCwxNCArNDQsMTQg
QEAgZGVmIGFkZF9uZXdsaW5lKGxpbmVzKToKIAogCiBjbGFzcyBPYmpDUHJvdG9jb2xUeXBlc0lt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgotICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBPYmpDR2VuZXJhdG9yLl9faW5p
dF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
KmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgT2JqQ0dlbmVyYXRvci5fX2luaXRfXyhzZWxmLCAq
YXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgogICAgICAg
ICByZXR1cm4gJyVzVHlwZXMubW0nICUgc2VsZi5wcm90b2NvbF9uYW1lKCkKIAogICAgIGRlZiBk
b21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gZmlsdGVyKE9iakNHZW5l
cmF0b3Iuc2hvdWxkX2dlbmVyYXRlX2RvbWFpbl90eXBlc19maWx0ZXIoc2VsZi5tb2RlbCgpKSwg
R2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisgICAgICAgIHJldHVybiBmaWx0
ZXIoc2VsZi5zaG91bGRfZ2VuZXJhdGVfdHlwZXNfZm9yX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFp
bnNfdG9fZ2VuZXJhdGUoc2VsZikpCiAKICAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgog
ICAgICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsKQEAgLTgxLDcgKzgxLDcgQEAgY2xhc3MgT2Jq
Q1Byb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKIAog
ICAgIGRlZiBnZW5lcmF0ZV90eXBlX2ltcGxlbWVudGF0aW9ucyhzZWxmLCBkb21haW4pOgogICAg
ICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9k
ZWNsYXJhdGlvbnM6CisgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFy
YXRpb25zX2Zvcl9kb21haW4oZG9tYWluKToKICAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKGRl
Y2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpKToKICAgICAgICAgICAgICAgICBhZGRfbmV3bGlu
ZShsaW5lcykKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV90eXBl
X2ltcGxlbWVudGF0aW9uKGRvbWFpbiwgZGVjbGFyYXRpb24pKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9y
LnB5CmluZGV4IDg1NTAyNzI5N2U1ZWU4YjBkZWM3Yzc4OTAyMDA2ZjBiNTYxODAzNTMuLmUxNTZi
MWRiZjE0NDgyNTk1OTVhMmNiODcxNDRiNGEyNjMwYjYzOTQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
b3IucHkKQEAgLTMwLDcgKzMwLDcgQEAgaW1wb3J0IHJlCiBmcm9tIHN0cmluZyBpbXBvcnQgVGVt
cGxhdGUKIAogZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0
ZXMgYXMgVGVtcGxhdGVzCi1mcm9tIG1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0
VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKK2Zyb20g
bW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEVudW1U
eXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcywgUGxhdGZvcm1zCiAKIGxvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC03NiwxNyArNzYsMzMgQEAgX1RZUEVTX1dJVEhfT1BF
Tl9GSUVMRFMgPSBzZXQoWwogCiAKIGNsYXNzIEdlbmVyYXRvcjoKLSAgICBkZWYgX19pbml0X18o
c2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9k
ZWwsIHBsYXRmb3JtLCBpbnB1dF9maWxlcGF0aCk6CiAgICAgICAgIHNlbGYuX21vZGVsID0gbW9k
ZWwKKyAgICAgICAgc2VsZi5fcGxhdGZvcm0gPSBwbGF0Zm9ybQogICAgICAgICBzZWxmLl9pbnB1
dF9maWxlcGF0aCA9IGlucHV0X2ZpbGVwYXRoCiAgICAgICAgIHNlbGYuX3NldHRpbmdzID0ge30K
IAogICAgIGRlZiBtb2RlbChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX21vZGVsCiAKKyAg
ICBkZWYgcGxhdGZvcm0oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wbGF0Zm9ybQorCiAg
ICAgZGVmIHNldF9nZW5lcmF0b3Jfc2V0dGluZyhzZWxmLCBrZXksIHZhbHVlKToKICAgICAgICAg
c2VsZi5fc2V0dGluZ3Nba2V5XSA9IHZhbHVlCiAKKyAgICBkZWYgY2FuX2dlbmVyYXRlX3BsYXRm
b3JtKHNlbGYsIG1vZGVsX3BsYXRmb3JtKToKKyAgICAgICAgcmV0dXJuIG1vZGVsX3BsYXRmb3Jt
IGlzIFBsYXRmb3Jtcy5HZW5lcmljIG9yIHNlbGYuX3BsYXRmb3JtIGlzIFBsYXRmb3Jtcy5BbGwg
b3IgbW9kZWxfcGxhdGZvcm0gaXMgc2VsZi5fcGxhdGZvcm0KKworICAgIGRlZiB0eXBlX2RlY2xh
cmF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIHJldHVybiBbdHlwZV9k
ZWNsYXJhdGlvbiBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkb21haW4uYWxsX3R5cGVfZGVjbGFy
YXRpb25zKCkgaWYgc2VsZi5jYW5fZ2VuZXJhdGVfcGxhdGZvcm0odHlwZV9kZWNsYXJhdGlvbi5w
bGF0Zm9ybSldCisKKyAgICBkZWYgY29tbWFuZHNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgor
ICAgICAgICByZXR1cm4gW2NvbW1hbmQgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmFsbF9jb21tYW5k
cygpIGlmIHNlbGYuY2FuX2dlbmVyYXRlX3BsYXRmb3JtKGNvbW1hbmQucGxhdGZvcm0pXQorCisg
ICAgZGVmIGV2ZW50c19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIHJldHVybiBb
ZXZlbnQgZm9yIGV2ZW50IGluIGRvbWFpbi5hbGxfZXZlbnRzKCkgaWYgc2VsZi5jYW5fZ2VuZXJh
dGVfcGxhdGZvcm0oZXZlbnQucGxhdGZvcm0pXQorCiAgICAgIyBUaGUgZ29vZnkgbmFtZSBpcyB0
byBkaXNhbWJpZ3VhdGUgZ2VuZXJhdG9yIHNldHRpbmdzIGZyb20gZnJhbWV3b3JrIHNldHRpbmdz
LgogICAgIGRlZiBnZXRfZ2VuZXJhdG9yX3NldHRpbmcoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUp
OgogICAgICAgICByZXR1cm4gc2VsZi5fc2V0dGluZ3MuZ2V0KGtleSwgZGVmYXVsdCkKQEAgLTE2
MSw3ICsxNzcsNyBAQCBjbGFzcyBHZW5lcmF0b3I6CiAKICAgICAgICAgZm91bmRfdHlwZXMgPSBz
ZXQoKQogICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6Ci0gICAgICAgICAgICBmb3IgZGVj
bGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAgZm9yIGRl
Y2xhcmF0aW9uIGluIHNlbGYudHlwZV9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihkb21haW4pOgog
ICAgICAgICAgICAgICAgIGlmIGRlY2xhcmF0aW9uLnR5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBf
VFlQRVNfTkVFRElOR19SVU5USU1FX0NBU1RTOgogICAgICAgICAgICAgICAgICAgICBsb2cuZGVi
dWcoIj4gR2F0aGVyaW5nIHR5cGVzIHJlZmVyZW5jZWQgYnkgJXMgdG8gZ2VuZXJhdGUgc2hhcGUg
YXNzZXJ0aW9ucy4iICUgZGVjbGFyYXRpb24udHlwZS5xdWFsaWZpZWRfbmFtZSgpKQogICAgICAg
ICAgICAgICAgICAgICBnYXRoZXJfdHJhbnNpdGl2ZWx5X3JlZmVyZW5jZWRfdHlwZXMoZGVjbGFy
YXRpb24udHlwZSwgZm91bmRfdHlwZXMpCkBAIC0xNzcsMTcgKzE5MywxNyBAQCBjbGFzcyBHZW5l
cmF0b3I6CiAgICAgICAgIGRvbWFpbnMgPSBzZWxmLm5vbl9zdXBwbGVtZW50YWxfZG9tYWlucygp
CiAKICAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgotICAgICAgICAgICAgZm9yIHR5cGVf
ZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAgZm9y
IHR5cGVfZGVjbGFyYXRpb24gaW4gc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRv
bWFpbik6CiAgICAgICAgICAgICAgICAgYWxsX3R5cGVzLmFwcGVuZCh0eXBlX2RlY2xhcmF0aW9u
LnR5cGUpCiAgICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRp
b24udHlwZV9tZW1iZXJzOgogICAgICAgICAgICAgICAgICAgICBhbGxfdHlwZXMuYXBwZW5kKHR5
cGVfbWVtYmVyLnR5cGUpCiAKICAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgotICAgICAg
ICAgICAgZm9yIGV2ZW50IGluIGRvbWFpbi5ldmVudHM6CisgICAgICAgICAgICBmb3IgZXZlbnQg
aW4gc2VsZi5ldmVudHNfZm9yX2RvbWFpbihkb21haW4pOgogICAgICAgICAgICAgICAgIGFsbF90
eXBlcy5leHRlbmQoW3BhcmFtZXRlci50eXBlIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRf
cGFyYW1ldGVyc10pCiAKICAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgotICAgICAgICAg
ICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAgICAgZm9yIGNvbW1h
bmQgaW4gc2VsZi5jb21tYW5kc19mb3JfZG9tYWluKGRvbWFpbik6CiAgICAgICAgICAgICAgICAg
YWxsX3R5cGVzLmV4dGVuZChbcGFyYW1ldGVyLnR5cGUgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5k
LmNhbGxfcGFyYW1ldGVyc10pCiAgICAgICAgICAgICAgICAgYWxsX3R5cGVzLmV4dGVuZChbcGFy
YW1ldGVyLnR5cGUgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzXSkK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vbW9kZWxzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vbW9kZWxzLnB5CmluZGV4IDcxNDRhOTgzMjc4ZDYxMmI5NDE1NTkxZDE5MDNkNWEz
NGVmY2U1YzguLjgxMGUwOTViZjhkOTc2NDNjMGI1Y2M1OWJjZTczNzBhMmQ1MzQ5M2QgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21v
ZGVscy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9tb2RlbHMucHkKQEAgLTEwOSw2ICsxMDksMzUgQEAgY2xhc3MgRnJhbWV3b3JrczoKICAg
ICBUZXN0ID0gRnJhbWV3b3JrKCJUZXN0IikKIAogCitjbGFzcyBQbGF0Zm9ybToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKworICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgZnJvbVN0cmluZyhwbGF0Zm9ybVN0cmluZyk6CisgICAgICAg
IHBsYXRmb3JtU3RyaW5nID0gcGxhdGZvcm1TdHJpbmcubG93ZXIoKQorICAgICAgICBpZiBwbGF0
Zm9ybVN0cmluZyA9PSAiaW9zIjoKKyAgICAgICAgICAgIHJldHVybiBQbGF0Zm9ybXMuaU9TCisK
KyAgICAgICAgaWYgcGxhdGZvcm1TdHJpbmcgPT0gIm1hY29zIjoKKyAgICAgICAgICAgIHJldHVy
biBQbGF0Zm9ybXMubWFjT1MKKworICAgICAgICBpZiBwbGF0Zm9ybVN0cmluZyA9PSAiYWxsIjoK
KyAgICAgICAgICAgIHJldHVybiBQbGF0Zm9ybXMuQWxsCisKKyAgICAgICAgaWYgcGxhdGZvcm1T
dHJpbmcgPT0gImdlbmVyaWMiIG9yIG5vdCBwbGF0Zm9ybVN0cmluZzoKKyAgICAgICAgICAgIHJl
dHVybiBQbGF0Zm9ybXMuR2VuZXJpYworCisgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJV
bmtub3duIHBsYXRmb3JtOiAlcyIgJSBwbGF0Zm9ybVN0cmluZykKKworCitjbGFzcyBQbGF0Zm9y
bXM6CisgICAgQWxsID0gUGxhdGZvcm0oIkFsbCIpCisgICAgR2VuZXJpYyA9IFBsYXRmb3JtKCJn
ZW5lcmljIikKKyAgICBpT1MgPSBQbGF0Zm9ybSgiaU9TIikKKyAgICBtYWNPUyA9IFBsYXRmb3Jt
KCJtYWNPUyIpCisKKwogY2xhc3MgVHlwZVJlZmVyZW5jZToKICAgICBkZWYgX19pbml0X18oc2Vs
ZiwgdHlwZV9raW5kLCByZWZlcmVuY2VkX3R5cGVfbmFtZSwgZW51bV92YWx1ZXMsIGFycmF5X2l0
ZW1zKToKICAgICAgICAgc2VsZi50eXBlX2tpbmQgPSB0eXBlX2tpbmQKQEAgLTM3MSw3ICs0MDAs
OCBAQCBjbGFzcyBQcm90b2NvbDoKICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJN
YWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHR5cGUgZGVjbGFyYXRpb24gZm9yICVzIGhh
cyBkdXBsaWNhdGUgbWVtYmVyIG5hbWVzIiAlIGpzb25bJ2lkJ10pCiAKICAgICAgICAgdHlwZV9y
ZWYgPSBUeXBlUmVmZXJlbmNlKGpzb25bJ3R5cGUnXSwganNvbi5nZXQoJyRyZWYnKSwganNvbi5n
ZXQoJ2VudW0nKSwganNvbi5nZXQoJ2l0ZW1zJykpCi0gICAgICAgIHJldHVybiBUeXBlRGVjbGFy
YXRpb24oanNvblsnaWQnXSwgdHlwZV9yZWYsIGpzb24uZ2V0KCJkZXNjcmlwdGlvbiIsICIiKSwg
dHlwZV9tZW1iZXJzKQorICAgICAgICBwbGF0Zm9ybSA9IFBsYXRmb3JtLmZyb21TdHJpbmcoanNv
bi5nZXQoJ3BsYXRmb3JtJywgJ2dlbmVyaWMnKSkKKyAgICAgICAgcmV0dXJuIFR5cGVEZWNsYXJh
dGlvbihqc29uWydpZCddLCB0eXBlX3JlZiwganNvbi5nZXQoImRlc2NyaXB0aW9uIiwgIiIpLCBw
bGF0Zm9ybSwgdHlwZV9tZW1iZXJzKQogCiAgICAgZGVmIHBhcnNlX3R5cGVfbWVtYmVyKHNlbGYs
IGpzb24pOgogICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhbJ25hbWUnXSwg
anNvbiwgInR5cGUgbWVtYmVyIikKQEAgLTQwNSw3ICs0MzUsOCBAQCBjbGFzcyBQcm90b2NvbDoK
ICAgICAgICAgICAgIGlmIGxlbihkdXBsaWNhdGVfbmFtZXMpID4gMDoKICAgICAgICAgICAgICAg
ICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBy
ZXR1cm4gcGFyYW1ldGVyIGxpc3QgZm9yIGNvbW1hbmQgJXMgaGFzIGR1cGxpY2F0ZSBwYXJhbWV0
ZXIgbmFtZXMiICUganNvblsnbmFtZSddKQogCi0gICAgICAgIHJldHVybiBDb21tYW5kKGpzb25b
J25hbWUnXSwgY2FsbF9wYXJhbWV0ZXJzLCByZXR1cm5fcGFyYW1ldGVycywganNvbi5nZXQoJ2Rl
c2NyaXB0aW9uJywgIiIpLCBqc29uLmdldCgnYXN5bmMnLCBGYWxzZSkpCisgICAgICAgIHBsYXRm
b3JtID0gUGxhdGZvcm0uZnJvbVN0cmluZyhqc29uLmdldCgncGxhdGZvcm0nLCAnZ2VuZXJpYycp
KQorICAgICAgICByZXR1cm4gQ29tbWFuZChqc29uWyduYW1lJ10sIGNhbGxfcGFyYW1ldGVycywg
cmV0dXJuX3BhcmFtZXRlcnMsIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICIiKSwgcGxhdGZvcm0s
IGpzb24uZ2V0KCdhc3luYycsIEZhbHNlKSkKIAogICAgIGRlZiBwYXJzZV9ldmVudChzZWxmLCBq
c29uKToKICAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWyduYW1lJ10sIGpz
b24sICJldmVudCIpCkBAIC00MjIsNyArNDUzLDggQEAgY2xhc3MgUHJvdG9jb2w6CiAgICAgICAg
ICAgICBpZiBsZW4oZHVwbGljYXRlX25hbWVzKSA+IDA6CiAgICAgICAgICAgICAgICAgcmFpc2Ug
UGFyc2VFeGNlcHRpb24oIk1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogcGFyYW1ldGVy
IGxpc3QgZm9yIGV2ZW50ICVzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzIiAlIGpzb25b
J25hbWUnXSkKIAotICAgICAgICByZXR1cm4gRXZlbnQoanNvblsnbmFtZSddLCBldmVudF9wYXJh
bWV0ZXJzLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAiIikpCisgICAgICAgIHBsYXRmb3JtID0g
UGxhdGZvcm0uZnJvbVN0cmluZyhqc29uLmdldCgncGxhdGZvcm0nLCAnZ2VuZXJpYycpKQorICAg
ICAgICByZXR1cm4gRXZlbnQoanNvblsnbmFtZSddLCBldmVudF9wYXJhbWV0ZXJzLCBqc29uLmdl
dCgnZGVzY3JpcHRpb24nLCAiIiksIHBsYXRmb3JtKQogCiAgICAgZGVmIHBhcnNlX2NhbGxfb3Jf
cmV0dXJuX3BhcmFtZXRlcihzZWxmLCBqc29uKToKICAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVk
X3Byb3BlcnRpZXMoWyduYW1lJ10sIGpzb24sICJwYXJhbWV0ZXIiKQpAQCAtNDQyLDcgKzQ3NCw3
IEBAIGNsYXNzIFByb3RvY29sOgogCiAgICAgICAgICMgR2F0aGVyIHF1YWxpZmllZCB0eXBlIG5h
bWVzIGZyb20gdHlwZSBkZWNsYXJhdGlvbnMgaW4gZWFjaCBkb21haW4uCiAgICAgICAgIGZvciBk
b21haW4gaW4gc2VsZi5kb21haW5zOgotICAgICAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIGRv
bWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBk
b21haW4uYWxsX3R5cGVfZGVjbGFyYXRpb25zKCk6CiAgICAgICAgICAgICAgICAgIyBCYXNpYyBz
YW5pdHkgY2hlY2tpbmcuCiAgICAgICAgICAgICAgICAgaWYgZGVjbGFyYXRpb24udHlwZV9yZWYu
cmVmZXJlbmNlZF90eXBlX25hbWUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIHJh
aXNlIFR5cGVjaGVja0V4Y2VwdGlvbigiVHlwZSBkZWNsYXJhdGlvbnMgbXVzdCBuYW1lIGEgYmFz
ZSB0eXBlLCBub3QgYSB0eXBlIHJlZmVyZW5jZS4iKQpAQCAtNTI2LDIxICs1NTgsMzAgQEAgY2xh
c3MgRG9tYWluOgogICAgICAgICBzZWxmLmZlYXR1cmVfZ3VhcmQgPSBmZWF0dXJlX2d1YXJkCiAg
ICAgICAgIHNlbGYuYXZhaWxhYmlsaXR5ID0gYXZhaWxhYmlsaXR5CiAgICAgICAgIHNlbGYuaXNf
c3VwcGxlbWVudGFsID0gaXNTdXBwbGVtZW50YWwKLSAgICAgICAgc2VsZi50eXBlX2RlY2xhcmF0
aW9ucyA9IHR5cGVfZGVjbGFyYXRpb25zCi0gICAgICAgIHNlbGYuY29tbWFuZHMgPSBjb21tYW5k
cwotICAgICAgICBzZWxmLmV2ZW50cyA9IGV2ZW50cworICAgICAgICBzZWxmLl90eXBlX2RlY2xh
cmF0aW9ucyA9IHR5cGVfZGVjbGFyYXRpb25zCisgICAgICAgIHNlbGYuX2NvbW1hbmRzID0gY29t
bWFuZHMKKyAgICAgICAgc2VsZi5fZXZlbnRzID0gZXZlbnRzCisKKyAgICBkZWYgYWxsX3R5cGVf
ZGVjbGFyYXRpb25zKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHlwZV9kZWNsYXJhdGlv
bnMKKworICAgIGRlZiBhbGxfY29tbWFuZHMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9j
b21tYW5kcworCisgICAgZGVmIGFsbF9ldmVudHMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
Ll9ldmVudHMKIAogICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2Nv
bCk6CiAgICAgICAgIGxvZy5kZWJ1ZygiPiBSZXNvbHZpbmcgdHlwZSBkZWNsYXJhdGlvbnMgZm9y
IGRvbWFpbjogJXMiICUgc2VsZi5kb21haW5fbmFtZSkKLSAgICAgICAgZm9yIGRlY2xhcmF0aW9u
IGluIHNlbGYudHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBz
ZWxmLl90eXBlX2RlY2xhcmF0aW9uczoKICAgICAgICAgICAgIGRlY2xhcmF0aW9uLnJlc29sdmVf
dHlwZV9yZWZlcmVuY2VzKHByb3RvY29sLCBzZWxmKQogCiAgICAgICAgIGxvZy5kZWJ1ZygiPiBS
ZXNvbHZpbmcgdHlwZXMgaW4gY29tbWFuZHMgZm9yIGRvbWFpbjogJXMiICUgc2VsZi5kb21haW5f
bmFtZSkKLSAgICAgICAgZm9yIGNvbW1hbmQgaW4gc2VsZi5jb21tYW5kczoKKyAgICAgICAgZm9y
IGNvbW1hbmQgaW4gc2VsZi5fY29tbWFuZHM6CiAgICAgICAgICAgICBjb21tYW5kLnJlc29sdmVf
dHlwZV9yZWZlcmVuY2VzKHByb3RvY29sLCBzZWxmKQogCiAgICAgICAgIGxvZy5kZWJ1ZygiPiBS
ZXNvbHZpbmcgdHlwZXMgaW4gZXZlbnRzIGZvciBkb21haW46ICVzIiAlIHNlbGYuZG9tYWluX25h
bWUpCi0gICAgICAgIGZvciBldmVudCBpbiBzZWxmLmV2ZW50czoKKyAgICAgICAgZm9yIGV2ZW50
IGluIHNlbGYuX2V2ZW50czoKICAgICAgICAgICAgIGV2ZW50LnJlc29sdmVfdHlwZV9yZWZlcmVu
Y2VzKHByb3RvY29sLCBzZWxmKQogCiAKQEAgLTU0OSwxMCArNTkwLDExIEBAIGNsYXNzIERvbWFp
bnM6CiAKIAogY2xhc3MgVHlwZURlY2xhcmF0aW9uOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0
eXBlX25hbWUsIHR5cGVfcmVmLCBkZXNjcmlwdGlvbiwgdHlwZV9tZW1iZXJzKToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgdHlwZV9uYW1lLCB0eXBlX3JlZiwgZGVzY3JpcHRpb24sIHBsYXRmb3Jt
LCB0eXBlX21lbWJlcnMpOgogICAgICAgICBzZWxmLnR5cGVfbmFtZSA9IHR5cGVfbmFtZQogICAg
ICAgICBzZWxmLnR5cGVfcmVmID0gdHlwZV9yZWYKICAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9
IGRlc2NyaXB0aW9uCisgICAgICAgIHNlbGYucGxhdGZvcm0gPSBwbGF0Zm9ybQogICAgICAgICBz
ZWxmLnR5cGVfbWVtYmVycyA9IHR5cGVfbWVtYmVycwogCiAgICAgICAgIGlmIHNlbGYudHlwZV9u
YW1lICE9IHVjZmlyc3Qoc2VsZi50eXBlX25hbWUpOgpAQCAtNTk2LDExICs2MzgsMTIgQEAgY2xh
c3MgUGFyYW1ldGVyOgogCiAKIGNsYXNzIENvbW1hbmQ6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYs
IGNvbW1hbmRfbmFtZSwgY2FsbF9wYXJhbWV0ZXJzLCByZXR1cm5fcGFyYW1ldGVycywgZGVzY3Jp
cHRpb24sIGlzX2FzeW5jKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZF9uYW1lLCBj
YWxsX3BhcmFtZXRlcnMsIHJldHVybl9wYXJhbWV0ZXJzLCBkZXNjcmlwdGlvbiwgcGxhdGZvcm0s
IGlzX2FzeW5jKToKICAgICAgICAgc2VsZi5jb21tYW5kX25hbWUgPSBjb21tYW5kX25hbWUKICAg
ICAgICAgc2VsZi5jYWxsX3BhcmFtZXRlcnMgPSBjYWxsX3BhcmFtZXRlcnMKICAgICAgICAgc2Vs
Zi5yZXR1cm5fcGFyYW1ldGVycyA9IHJldHVybl9wYXJhbWV0ZXJzCiAgICAgICAgIHNlbGYuZGVz
Y3JpcHRpb24gPSBkZXNjcmlwdGlvbgorICAgICAgICBzZWxmLnBsYXRmb3JtID0gcGxhdGZvcm0K
ICAgICAgICAgc2VsZi5pc19hc3luYyA9IGlzX2FzeW5jCiAKICAgICBkZWYgcmVzb2x2ZV90eXBl
X3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRvbWFpbik6CkBAIC02MTQsMTAgKzY1NywxMSBA
QCBjbGFzcyBDb21tYW5kOgogCiAKIGNsYXNzIEV2ZW50OgotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBldmVudF9uYW1lLCBldmVudF9wYXJhbWV0ZXJzLCBkZXNjcmlwdGlvbik6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGV2ZW50X25hbWUsIGV2ZW50X3BhcmFtZXRlcnMsIGRlc2NyaXB0aW9uLCBw
bGF0Zm9ybSk6CiAgICAgICAgIHNlbGYuZXZlbnRfbmFtZSA9IGV2ZW50X25hbWUKICAgICAgICAg
c2VsZi5ldmVudF9wYXJhbWV0ZXJzID0gZXZlbnRfcGFyYW1ldGVycwogICAgICAgICBzZWxmLmRl
c2NyaXB0aW9uID0gZGVzY3JpcHRpb24KKyAgICAgICAgc2VsZi5wbGF0Zm9ybSA9IHBsYXRmb3Jt
CiAKICAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRvbWFp
bik6CiAgICAgICAgIGxvZy5kZWJ1ZygiPj4gUmVzb2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBmb3Ig
cGFyYW1ldGVycyBpbiBldmVudDogJXMiICUgc2VsZi5ldmVudF9uYW1lKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5l
cmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9vYmpjX2dlbmVyYXRvci5weQppbmRleCBjYWQ4NzJkMTAxNzFlNjdmZjk3MTg2ZDBlMmE1ZWVk
NjAyY2IwMGNlLi4yYmU4NDVlNmJlYTg2NGFhMGIyYWYzYzRkNWRhNzk4M2EyYTEzMTcyIDEwMDc1
NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9v
YmpjX2dlbmVyYXRvci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvci5weQpAQCAtODksOCArODksOCBAQCBjbGFzcyBP
YmpDR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgT0JKQ19TSEFSRURfUFJFRklYID0gJ1Byb3Rv
Y29sJwogICAgIE9CSkNfU1RBVElDX1BSRUZJWCA9ICclcyVzJyAlIChPQkpDX0hFTFBFUl9QUkVG
SVgsIE9CSkNfU0hBUkVEX1BSRUZJWCkKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwg
aW5wdXRfZmlsZXBhdGgpOgotICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWws
IGlucHV0X2ZpbGVwYXRoKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3Mp
OgorICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQogCiAg
ICAgIyBUaGUgJ3Byb3RvY29sIG5hbWUnIGlzIHVzZWQgdG8gcHJlZml4IGZpbGVuYW1lcyBmb3Ig
YSBwcm90b2NvbCBncm91cCAoYSBzZXQgb2YgZG9tYWlucyBnZW5lcmF0ZWQgdG9nZXRoZXIpLgog
ICAgIGRlZiBwcm90b2NvbF9uYW1lKHNlbGYpOgpAQCAtMTIwLDM0ICsxMjAsMzcgQEAgY2xhc3Mg
T2JqQ0dlbmVyYXRvcihHZW5lcmF0b3IpOgogCiAgICAgRE9NQUlOU19UT19HRU5FUkFURSA9IFsn
Q1NTJywgJ0RPTScsICdET01TdG9yYWdlJywgJ05ldHdvcmsnLCAnUGFnZScsICdBdXRvbWF0aW9u
JywgJ0dlbmVyaWNUeXBlcyddCiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHNob3VsZF9n
ZW5lcmF0ZV9kb21haW5fdHlwZXNfZmlsdGVyKG1vZGVsKToKLSAgICAgICAgZGVmIHNob3VsZF9n
ZW5lcmF0ZV9kb21haW5fdHlwZXMoZG9tYWluKToKLSAgICAgICAgICAgIGlmIG1vZGVsLmZyYW1l
d29yayBpcyBGcmFtZXdvcmtzLlRlc3Q6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAg
ICAgICAgICAgIHdoaXRlbGlzdCA9IHNldChPYmpDR2VuZXJhdG9yLkRPTUFJTlNfVE9fR0VORVJB
VEUpCi0gICAgICAgICAgICB3aGl0ZWxpc3QudXBkYXRlKHNldChbJ0NvbnNvbGUnLCAnRGVidWdn
ZXInLCAnUnVudGltZSddKSkKLSAgICAgICAgICAgIHJldHVybiBkb21haW4uZG9tYWluX25hbWUg
aW4gd2hpdGVsaXN0Ci0gICAgICAgIHJldHVybiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX3R5cGVz
CisgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV90eXBlc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6
CisgICAgICAgIGlmIG5vdCBsZW4oc2VsZi50eXBlX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKGRv
bWFpbikpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICBAc3RhdGljbWV0aG9kCi0g
ICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fY29tbWFuZF9oYW5kbGVyX2ZpbHRlcihtb2Rl
bCk6Ci0gICAgICAgIGRlZiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluX2NvbW1hbmRfaGFuZGxlcihk
b21haW4pOgotICAgICAgICAgICAgaWYgbW9kZWwuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuVGVz
dDoKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICAgICAgd2hpdGVsaXN0ID0g
c2V0KE9iakNHZW5lcmF0b3IuRE9NQUlOU19UT19HRU5FUkFURSkKLSAgICAgICAgICAgIHJldHVy
biBkb21haW4uZG9tYWluX25hbWUgaW4gd2hpdGVsaXN0Ci0gICAgICAgIHJldHVybiBzaG91bGRf
Z2VuZXJhdGVfZG9tYWluX2NvbW1hbmRfaGFuZGxlcgorICAgICAgICBpZiBzZWxmLm1vZGVsKCku
ZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuVGVzdDoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCiAK
LSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW5fZXZlbnRf
ZGlzcGF0Y2hlcl9maWx0ZXIobW9kZWwpOgotICAgICAgICBkZWYgc2hvdWxkX2dlbmVyYXRlX2Rv
bWFpbl9ldmVudF9kaXNwYXRjaGVyKGRvbWFpbik6Ci0gICAgICAgICAgICBpZiBtb2RlbC5mcmFt
ZXdvcmsgaXMgRnJhbWV3b3Jrcy5UZXN0OgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0g
ICAgICAgICAgICB3aGl0ZWxpc3QgPSBzZXQoT2JqQ0dlbmVyYXRvci5ET01BSU5TX1RPX0dFTkVS
QVRFKQotICAgICAgICAgICAgd2hpdGVsaXN0LmFkZCgnQ29uc29sZScpCi0gICAgICAgICAgICBy
ZXR1cm4gZG9tYWluLmRvbWFpbl9uYW1lIGluIHdoaXRlbGlzdAotICAgICAgICByZXR1cm4gc2hv
dWxkX2dlbmVyYXRlX2RvbWFpbl9ldmVudF9kaXNwYXRjaGVyCisgICAgICAgIHdoaXRlbGlzdCA9
IHNldChPYmpDR2VuZXJhdG9yLkRPTUFJTlNfVE9fR0VORVJBVEUpCisgICAgICAgIHdoaXRlbGlz
dC51cGRhdGUoc2V0KFsnQ29uc29sZScsICdEZWJ1Z2dlcicsICdSdW50aW1lJ10pKQorICAgICAg
ICByZXR1cm4gZG9tYWluLmRvbWFpbl9uYW1lIGluIHdoaXRlbGlzdAorCisgICAgZGVmIHNob3Vs
ZF9nZW5lcmF0ZV9jb21tYW5kc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGlm
IG5vdCBsZW4oc2VsZi5jb21tYW5kc19mb3JfZG9tYWluKGRvbWFpbikpOgorICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgc2VsZi5tb2RlbCgpLmZyYW1ld29yayBpcyBGcmFt
ZXdvcmtzLlRlc3Q6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHdoaXRlbGlz
dCA9IHNldChPYmpDR2VuZXJhdG9yLkRPTUFJTlNfVE9fR0VORVJBVEUpCisgICAgICAgIHJldHVy
biBkb21haW4uZG9tYWluX25hbWUgaW4gd2hpdGVsaXN0CisKKyAgICBkZWYgc2hvdWxkX2dlbmVy
YXRlX2V2ZW50c19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGlmIG5vdCBsZW4o
c2VsZi5ldmVudHNfZm9yX2RvbWFpbihkb21haW4pKToKKyAgICAgICAgICAgIHJldHVybiBGYWxz
ZQorCisgICAgICAgIGlmIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5UZXN0
OgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB3aGl0ZWxpc3QgPSBzZXQoT2Jq
Q0dlbmVyYXRvci5ET01BSU5TX1RPX0dFTkVSQVRFKQorICAgICAgICB3aGl0ZWxpc3QuYWRkKCdD
b25zb2xlJykKKyAgICAgICAgcmV0dXJuIGRvbWFpbi5kb21haW5fbmFtZSBpbiB3aGl0ZWxpc3QK
IAogICAgICMgT2JqQyBlbnVtIGFuZCB0eXBlIG5hbWVzLgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQppbmRleCA0YWYwNzg3ZDAx
NzVjZDk1NmFkMzExMWY0YzMwMjBmZDY4NDE3ODNiLi5lMzlhNjA0ZmM1OWQxZWE4MDRkOTEwODI1
ZDc4NWQyY2MxOWI4NmRkIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKQEAgLTEsNiArMSw2IEBACiAjIS91c3IvYmluL2VudiBw
eXRob24KICMKLSMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMTQsNiArMTE0LDcgQEAg
ZGVmIGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbihwcmltYXJ5X3NwZWNpZmljYXRpb25fZmls
ZXBhdGg9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RpcnBh
dGg9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2Vfb3V0cHV0PUZh
bHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXdvcmtfbmFtZT0iIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1fbmFtZT0iIiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfZnJvbnRlbmQ9VHJ1ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfYmFja2VuZD1UcnVlKToKIApAQCAt
MTI1LDYgKzEyNiw3IEBAIGRlZiBnZW5lcmF0ZV9mcm9tX3NwZWNpZmljYXRpb24ocHJpbWFyeV9z
cGVjaWZpY2F0aW9uX2ZpbGVwYXRoPU5vbmUsCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFz
IGU6CiAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkVycm9yIHBhcnNpbmcgdmFsaWQgSlNP
TiBpbiBmaWxlOiAiICsgZmlsZXBhdGggKyAiXG5QYXJzZSBlcnJvcjogIiArIHN0cihlKSkKIAor
ICAgIHBsYXRmb3JtID0gUGxhdGZvcm0uZnJvbVN0cmluZyhwbGF0Zm9ybV9uYW1lKQogICAgIHBy
b3RvY29sID0gbW9kZWxzLlByb3RvY29sKGZyYW1ld29ya19uYW1lKQogICAgIGZvciBzcGVjaWZp
Y2F0aW9uIGluIHN1cHBsZW1lbnRhbF9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoczoKICAgICAgICAg
bG9hZF9zcGVjaWZpY2F0aW9uKHByb3RvY29sLCBzcGVjaWZpY2F0aW9uLCBpc1N1cHBsZW1lbnRh
bD1UcnVlKQpAQCAtMTMyLDU5ICsxMzQsNjEgQEAgZGVmIGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNh
dGlvbihwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGg9Tm9uZSwKIAogICAgIHByb3RvY29s
LnJlc29sdmVfdHlwZXMoKQogCisgICAgZ2VuZXJhdG9yX2FyZ3VtZW50cyA9IFtwcm90b2NvbCwg
cGxhdGZvcm0sIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aF0KICAgICBnZW5lcmF0b3Jz
ID0gW10KKwogICAgIGlmIHByb3RvY29sLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLlRlc3Q6Ci0g
ICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEpTQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yKHByb3Rv
Y29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3Jz
LmFwcGVuZChDcHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihwcm90
b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9y
cy5hcHBlbmQoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHBy
aW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5k
KENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHBy
aW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5k
KENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9z
cGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwRnJv
bnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlf
c3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcFBy
b3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlv
bl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcFByb3RvY29sVHlwZXNJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2Zp
bGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0JhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgp
KQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRo
KSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0NvbmZpZ3VyYXRpb25IZWFkZXJHZW5l
cmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAg
IGdlbmVyYXRvcnMuYXBwZW5kKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdl
bmVyYXRvcnMuYXBwZW5kKE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAg
Z2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0hlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9z
cGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0lu
dGVybmFsSGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmls
ZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDUHJvdG9jb2xUeXBlQ29udmVy
c2lvbnNIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxl
cGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNQcm90b2NvbFR5cGVDb252ZXJz
aW9uc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRp
b25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDUHJvdG9jb2xUeXBl
c0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25f
ZmlsZXBhdGgpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChKU0JhY2tlbmRDb21tYW5kc0dl
bmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5k
KENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0b3Jf
YXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0
b3JzLmFwcGVuZChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKCpn
ZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwRnJvbnRl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAg
ICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVu
ZChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkK
KyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBl
bmQoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1l
bnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25HZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5l
cmF0b3JzLmFwcGVuZChPYmpDQ29uZmlndXJhdGlvbkhlYWRlckdlbmVyYXRvcigqZ2VuZXJhdG9y
X2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNDb25maWd1cmF0aW9u
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBn
ZW5lcmF0b3JzLmFwcGVuZChPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChP
YmpDSGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJh
dG9ycy5hcHBlbmQoT2JqQ0ludGVybmFsSGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1l
bnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNp
b25zSGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJh
dG9ycy5hcHBlbmQoT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSW1wbGVtZW50YXRpb25HZW5l
cmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChP
YmpDUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1l
bnRzKSkKIAogICAgIGVsaWYgcHJvdG9jb2wuZnJhbWV3b3JrIGlzIEZyYW1ld29ya3MuSmF2YVNj
cmlwdENvcmU6Ci0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKEpTQmFja2VuZENvbW1hbmRzR2Vu
ZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAg
ICBnZW5lcmF0b3JzLmFwcGVuZChDcHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdl
bmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAg
ICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Io
cHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVy
YXRvcnMuYXBwZW5kKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Io
cHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVy
YXRvcnMuYXBwZW5kKENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihwcm90b2Nv
bCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9ycy5h
cHBlbmQoQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9j
b2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMu
YXBwZW5kKENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlf
c3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcFBy
b3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVj
aWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoSlNCYWNrZW5k
Q29tbWFuZHNHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0
b3JzLmFwcGVuZChDcHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcigq
Z2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcEJhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAg
ICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5k
KENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50
cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJh
dG9ycy5hcHBlbmQoQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcigqZ2VuZXJhdG9yX2Fy
Z3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcFByb3RvY29sVHlwZXNJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCiAKICAgICBlbGlmIHBy
b3RvY29sLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLldlYktpdCBhbmQgZ2VuZXJhdGVfYmFja2Vu
ZDoKLSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJH
ZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAg
ICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAg
ICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IocHJv
dG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRv
cnMuYXBwZW5kKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2Nv
bCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5h
cHBlbmQoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1
bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChDcHBCYWNrZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2Vu
ZXJhdG9ycy5hcHBlbmQoQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcigqZ2VuZXJhdG9y
X2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKENwcFByb3RvY29sVHlwZXNJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCiAKICAgICBlbGlm
IHByb3RvY29sLmZyYW1ld29yayBpcyBGcmFtZXdvcmtzLldlYktpdCBhbmQgZ2VuZXJhdGVfZnJv
bnRlbmQ6Ci0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNIZWFkZXJHZW5lcmF0b3IocHJv
dG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRv
cnMuYXBwZW5kKE9iakNQcm90b2NvbFR5cGVDb252ZXJzaW9uc0hlYWRlckdlbmVyYXRvcihwcm90
b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAgICAgZ2VuZXJhdG9y
cy5hcHBlbmQoT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdl
bmVyYXRvcnMuYXBwZW5kKE9iakNQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3Io
cHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgICAgIGdlbmVy
YXRvcnMuYXBwZW5kKE9iakNIZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQor
ICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNIZWFk
ZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFw
cGVuZChPYmpDUHJvdG9jb2xUeXBlQ29udmVyc2lvbnNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcigq
Z2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNQcm90
b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQog
CiAgICAgZWxpZiBwcm90b2NvbC5mcmFtZXdvcmsgaXMgRnJhbWV3b3Jrcy5XZWJJbnNwZWN0b3I6
Ci0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdl
bmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKLSAgICAg
ICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAg
ICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNDb25maWd1cmF0aW9uSGVhZGVyR2VuZXJhdG9yKHBy
b3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0
b3JzLmFwcGVuZChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3Rv
Y29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQotICAgICAgICBnZW5lcmF0b3Jz
LmFwcGVuZChPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJv
dG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRv
cnMuYXBwZW5kKE9iakNIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNh
dGlvbl9maWxlcGF0aCkpCi0gICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNJbnRlcm5hbEhl
YWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkK
LSAgICAgICAgZ2VuZXJhdG9ycy5hcHBlbmQoT2JqQ1Byb3RvY29sVHlwZUNvbnZlcnNpb25zSGVh
ZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQot
ICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAg
ICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0
b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpD
QmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3Vt
ZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNDb25maWd1cmF0aW9uSGVhZGVy
R2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKKyAgICAgICAgZ2VuZXJhdG9ycy5hcHBl
bmQoT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVyYXRvcigqZ2VuZXJhdG9yX2Fy
Z3VtZW50cykpCisgICAgICAgIGdlbmVyYXRvcnMuYXBwZW5kKE9iakNGcm9udGVuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcigqZ2VuZXJhdG9yX2FyZ3VtZW50cykpCisgICAgICAg
IGdlbmVyYXRvcnMuYXBwZW5kKE9iakNIZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVu
dHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDSW50ZXJuYWxIZWFkZXJHZW5lcmF0
b3IoKmdlbmVyYXRvcl9hcmd1bWVudHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpD
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnNIZWFkZXJHZW5lcmF0b3IoKmdlbmVyYXRvcl9hcmd1bWVu
dHMpKQorICAgICAgICBnZW5lcmF0b3JzLmFwcGVuZChPYmpDUHJvdG9jb2xUeXBlc0ltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yKCpnZW5lcmF0b3JfYXJndW1lbnRzKSkKIAogICAgIHNpbmdsZV9vdXRw
dXRfZmlsZV9jb250ZW50cyA9IFtdCiAKQEAgLTIxNiw2ICsyMjAsNyBAQCBkZWYgZ2VuZXJhdGVf
ZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aD1Ob25lLAog
CiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIGFsbG93ZWRfZnJhbWV3b3JrX25hbWVz
ID0gWydKYXZhU2NyaXB0Q29yZScsICdXZWJJbnNwZWN0b3InLCAnV2ViS2l0JywgJ1Rlc3QnXQor
ICAgIGFsbG93ZWRfcGxhdGZvcm1fbmFtZXMgPSBbJ2lPUycsICdtYWNPUycsICdhbGwnLCAnZ2Vu
ZXJpYyddCiAgICAgY2xpX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZT0idXNh
Z2U6ICVwcm9nIFtvcHRpb25zXSBQcmltYXJ5UHJvdG9jb2wuanNvbiBbU3VwcGxlbWVudGFsUHJv
dG9jb2wuanNvbiAuLi5dIikKICAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi1vIiwgIi0tb3V0
cHV0RGlyIiwgaGVscD0iRGlyZWN0b3J5IHdoZXJlIGdlbmVyYXRlZCBmaWxlcyBzaG91bGQgYmUg
d3JpdHRlbi4iKQogICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLS1mcmFtZXdvcmsiLCB0eXBl
PSJjaG9pY2UiLCBjaG9pY2VzPWFsbG93ZWRfZnJhbWV3b3JrX25hbWVzLCBoZWxwPSJUaGUgZnJh
bWV3b3JrIHRoYXQgdGhlIHByaW1hcnkgc3BlY2lmaWNhdGlvbiBiZWxvbmdzIHRvLiIpCkBAIC0y
MjQsNiArMjI5LDcgQEAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBjbGlfcGFyc2Vy
LmFkZF9vcHRpb24oIi10IiwgIi0tdGVzdCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IkVu
YWJsZSB0ZXN0IG1vZGUuIFVzZSB1bmlxdWUgb3V0cHV0IGZpbGVuYW1lcyBjcmVhdGVkIGJ5IHBy
ZXBlbmRpbmcgdGhlIGlucHV0IGZpbGVuYW1lLiIpCiAgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9u
KCItLWZyb250ZW5kIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iR2VuZXJhdGUgY29kZSBm
b3IgdGhlIGZyb250ZW5kLXNpZGUgb2YgdGhlIHByb3RvY29sIG9ubHkuIikKICAgICBjbGlfcGFy
c2VyLmFkZF9vcHRpb24oIi0tYmFja2VuZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9Ikdl
bmVyYXRlIGNvZGUgZm9yIHRoZSBiYWNrZW5kLXNpZGUgb2YgdGhlIHByb3RvY29sIG9ubHkuIikK
KyAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0tcGxhdGZvcm0iLCBkZWZhdWx0PSJnZW5lcmlj
IiwgaGVscD0iVGhlIHBsYXRmb3JtIG9mIHRoZSBiYWNrZW5kIGJlaW5nIGdlbmVyYXRlZC4gRm9y
IGV4YW1wbGUsIHdlIGNvbXBpbGUgV2ViS2l0MiBmb3IgZWl0aGVyIG1hY09TIG9yIGlPUy4gVGhp
cyB2YWx1ZSBpcyBjYXNlLWluc2Vuc2l0aXZlLiBBbGxvd2VkIHZhbHVlczogJXMiICUgIiwgIi5q
b2luKGFsbG93ZWRfcGxhdGZvcm1fbmFtZXMpKQogICAgIG9wdGlvbnMgPSBOb25lCiAKICAgICBh
cmdfb3B0aW9ucywgYXJnX3ZhbHVlcyA9IGNsaV9wYXJzZXIucGFyc2VfYXJncygpCkBAIC0yNDks
NiArMjU1LDcgQEAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICAgICAgJ291dHB1dF9k
aXJwYXRoJzogYXJnX29wdGlvbnMub3V0cHV0RGlyLAogICAgICAgICAnY29uY2F0ZW5hdGVfb3V0
cHV0JzogYXJnX29wdGlvbnMudGVzdCwKICAgICAgICAgJ2ZyYW1ld29ya19uYW1lJzogYXJnX29w
dGlvbnMuZnJhbWV3b3JrLAorICAgICAgICAncGxhdGZvcm1fbmFtZSc6IGFyZ19vcHRpb25zLnBs
YXRmb3JtLAogICAgICAgICAnZm9yY2Vfb3V0cHV0JzogYXJnX29wdGlvbnMuZm9yY2UsCiAgICAg
ICAgICdnZW5lcmF0ZV9iYWNrZW5kJzogZ2VuZXJhdGVfYmFja2VuZCwKICAgICAgICAgJ2dlbmVy
YXRlX2Zyb250ZW5kJzogZ2VuZXJhdGVfZnJvbnRlbmQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxsL2RlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvYWxsL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uODE3ZjEzNWVlNWE3MjA5N2FlM2UxMzFiZGQ0MGU2MDE2OThhYjEwYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9hbGwv
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgpAQCAtMCwwICsxLDI4IEBACit7Cisg
ICAgImRvbWFpbiI6ICJOZXR3b3JrIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJOZXR3b3JrRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0
IiwKKyAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCisgICAgICAgICAgICAicHJvcGVy
dGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJz
dHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJF
cnJvciBjb2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29t
bWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZSIs
CisgICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAorICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUg
aW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfQor
ICAgIF0sCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAi
cmVzb3VyY2VMb2FkZWQiLAorICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKKyAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIHJlc291cmNlIHdhcyBsb2FkZWQuIgorICAgICAgICB9
CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2FsbC9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5q
c29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9hbGwvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNmYzNDhmMmE4YTVmOTlkNTRhMGM1MjQ0NTQ1NmI0OWY2NzY3YjQ1YwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9hbGwvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1
bHQKQEAgLTAsMCArMSwxMTcyIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisvLyBOZXR3b3JrLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck5ldHdvcmtE
aXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmlu
ZChJbnNwZWN0b3JCYWNrZW5kLCAiTmV0d29yayIpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckV2ZW50KCJOZXR3b3JrLnJlc291cmNlTG9hZGVkIiwgW10pOworSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsubG9hZFJlc291cmNlIiwgW10sIFtdKTsKK0luc3BlY3Rv
ckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmsiKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgor
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJs
aWM6CisgICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRj
aGVyKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVm
UHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCitjbGFz
cyBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9u
ZyBjYWxsSWQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6
IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVOZXR3b3JrQmFj
a2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisKK2NsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVi
bGljOgorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmKSA9IDA7Citw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigp
OworfTsKKworY2xhc3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29y
a0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1
ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3Nh
Z2UpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFs
dGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKiBhbHRl
cm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3Bh
dGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
KiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07CisjZW5kaWYKK3ByaXZhdGU6Cisg
ICAgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5k
aWYKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK05ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6On5OZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1JlZjxOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJh
Y2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29ya0JhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitOZXR3b3Jr
QmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0
Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
IGFnZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3Bh
dGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIk5ldHdvcmsiKSwgdGhp
cyk7Cit9CisKK3ZvaWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVz
c2FnZSkKK3sKKyAgICBSZWY8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlz
KTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2Fn
ZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOworCisgICAg
aWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikKKyAgICAgICAgbG9hZFJlc291cmNlKHJlcXVl
c3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2RO
b3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiTmV0d29yayIsICcuJywgbWV0aG9kLCAiJyB3YXMg
bm90IGZvdW5kIikpOworfQorCit2b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmKQoreworI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVy
bmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVz
b3VyY2UocmVxdWVzdElkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAg
RXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UoZXJyb3Ip
OworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3Bw
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworY2xhc3Mg
TmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgTmV0d29ya0Zyb250ZW5k
RGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJv
dXRlcihmcm9udGVuZFJvdXRlcikgeyB9CisgICAgdm9pZCByZXNvdXJjZUxvYWRlZCgpOworcHJp
dmF0ZToKKyAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKK307CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE5ldHdvcmtGcm9udGVu
ZERpc3BhdGNoZXI6OnJlc291cmNlTG9hZGVkKCkKK3sKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0
PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3Nh
Z2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIk5ldHdv
cmsucmVzb3VyY2VMb2FkZWQiKSk7CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3Rv
Y29sIHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgTmV0d29yayB7Citj
bGFzcyBOZXR3b3JrRXJyb3I7Cit9IC8vIE5ldHdvcmsKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xh
cmF0aW9ucy4KKworCisKKworbmFtZXNwYWNlIE5ldHdvcmsgeworY2xhc3MgTmV0d29ya0Vycm9y
IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAg
ZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEg
PDwgMCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0g
KE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAg
ICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypOZXR3b3JrRXJyb3IqL0luc3BlY3Rvck9i
amVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNT
ZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdl
U2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIpLCB2YWx1ZSk7CisgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2Nv
ZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoQVNDSUlM
aXRlcmFsKCJjb2RlIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29k
ZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxOZXR3b3JrRXJyb3I+IHJlbGVhc2Uo
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVs
ZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
c2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9j
YXN0KTsKKworICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1
bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVy
cHJldF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJnJlc3VsdCkpOworICAgICAgICB9CisgICAg
fTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxO
ZXR3b3JrRXJyb3I+IHJlc3VsdCA9IE5ldHdvcmtFcnJvcjo6Y3JlYXRlKCkKKyAgICAgKiAgICAg
LnNldE1lc3NhZ2UoLi4uKQorICAgICAqICAgICAuc2V0Q29kZSguLi4pCisgICAgICogICAgIC5y
ZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKworfSAvLyBOZXR3b3JrCisKKworCit9IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90
b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3Jr
RG9tYWluSGFuZGxlcjsKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworY2xhc3MgT2JqQ0lu
c3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+
IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9h
ZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgUmV0YWlu
UHRyPGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2UobG9uZyByZXF1ZXN0SWQpCit7CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJp
bmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9
OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7
CisgICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbiwg
c2V0dGVyPXNldE5ldHdvcmtIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhh
bmRsZXI+IG5ldHdvcmtIYW5kbGVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBU
ZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyICpuZXR3b3JrRXZlbnREaXNw
YXRjaGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZv
cm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlz
cGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRlc3RQcm90
b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBfbmV0d29ya0hhbmRsZXI7CisgICAgVGVzdFByb3Rv
Y29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqX25ldHdvcmtFdmVudERpc3BhdGNoZXI7
Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9s
bGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtfbmV0d29ya0hhbmRsZXIgcmVsZWFzZV07Cisg
ICAgW19uZXR3b3JrRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9j
XTsKK30KKworLSAodm9pZClzZXROZXR3b3JrSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0d29y
a0RvbWFpbkhhbmRsZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29ya0hh
bmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfbmV0d29ya0hhbmRsZXIgcmVsZWFzZV07
CisgICAgX25ldHdvcmtIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0
ZXJuYXRlRGlzcGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IHN0
ZDo6bWFrZV91bmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyLCBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+PihBU0NJSUxpdGVy
YWwoIk5ldHdvcmsiKSwgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIp
KTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFn
ZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiluZXR3
b3JrSGFuZGxlcgoreworICAgIHJldHVybiBfbmV0d29ya0hhbmRsZXI7Cit9CisKKy0gKFRlc3RQ
cm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKiluZXR3b3JrRXZlbnREaXNwYXRj
aGVyCit7CisgICAgaWYgKCFfbmV0d29ya0V2ZW50RGlzcGF0Y2hlcikKKyAgICAgICAgX25ldHdv
cmtFdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3Bh
dGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07CisgICAgcmV0dXJu
IF9uZXR3b3JrRXZlbnREaXNwYXRjaGVyOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3
b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOworeworICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmls
OworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpcmVzb3VyY2VMb2FkZWQKK3sKKyAgICBj
b25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVy
KCk7CisKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
Im1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiKSk7CisgICAg
cm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4K
KworCitAY2xhc3MgVGVzdFByb3RvY29sTmV0d29ya0Vycm9yOworCisKKworCitfX2F0dHJpYnV0
ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sTmV0
d29ya0Vycm9yIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpz
b25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1l
c3NhZ2UgY29kZTooaW50KWNvZGU7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21p
YywgY29weSkgTlNTdHJpbmcgKm1lc3NhZ2U7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgYXNzaWduKSBpbnQgY29kZTsKK0BlbmQKKworQHByb3RvY29sIFRlc3RQcm90b2Nv
bE5ldHdvcmtEb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0ByZXF1aXJlZAorLSAodm9pZClsb2Fk
UmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKCkpc3VjY2Vzc0NhbGxiYWNrOworQGVu
ZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2Ug
VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2
b2lkKXJlc291cmNlTG9hZGVkOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIK
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK0BpbnRlcmZh
Y2UgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAoUHJpdmF0ZSkKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rvcjo6QXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT2JqQ0VudW1UeXBlIGZy
b21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBh
cnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmtEb21haW4pCisKKysgKHZvaWQpX3BhcnNlTmV0
d29ya0Vycm9yOihUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucyAoTmV0d29ya0RvbWFpbikKKworKyAodm9pZClfcGFyc2VOZXR3b3JrRXJy
b3I6KFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
RGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sTmV0d29y
a0Vycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJp
dmF0ZS5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW1w
b3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisK
K0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IKKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+
ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShw
YXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKKyAgICBzZWxmLm1lc3NhZ2UgPSBwYXls
b2FkW0AibWVzc2FnZSJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKKyAgICBzZWxmLmNvZGUgPSBbcGF5bG9h
ZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29u
T2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9iamVj
dDpbanNvbk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhN
ZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisKKyAg
ICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UK
K3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOworfQor
CistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zvcktl
eTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAgIFtz
dXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29kZQor
eworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVuZAor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLWFz
eW5jLWF0dHJpYnV0ZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDExMjYyZTg4OWZhNWJkMGI0YWU1N2U1ZjdmMWJhYzZjZmYzZmU5
MzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotewotICAg
ICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAg
ICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAotICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIs
Ci0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJh
c2Ugb2JqZWN0LiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlBy
aW1hcnlDb2xvcnMiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAg
ICJlbnVtIjogWyJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdCi0gICAgICAgIH0sCi0gICAgICAgIHsK
LSAgICAgICAgICAgICJpZCI6ICJDb2xvckxpc3QiLAotICAgICAgICAgICAgInR5cGUiOiAiYXJy
YXkiLAotICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9Ci0g
ICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCi0gICAgICAg
ICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFi
YXNlIGVycm9yLiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAi
RXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5
cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQotICAgICAgICAg
ICAgXQotICAgICAgICB9Ci0gICAgXSwKLSAgICAiY29tbWFuZHMiOiBbCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLAot
ICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJk
YXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiB9Ci0gICAgICAgICAgICBdLAotICAgICAg
ICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1l
cyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6
ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUi
OiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBl
IjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJv
cHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9y
IiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIs
ICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29s
b3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxv
dyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAg
fSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMiLAotICAgICAgICAgICAgImFzeW5jIjogdHJ1ZSwKLSAgICAgICAgICAg
ICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIs
ICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVy
eSIsICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1
cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6
ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIs
ICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFt
cCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlk
IiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjog
IlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwi
OiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUi
OiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2si
XSwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAg
IHsKLSAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxTeW5jIiwKLSAgICAgICAgICAgICJw
YXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIk
cmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIs
ICJ0eXBlIjogInN0cmluZyIgfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5z
IjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJh
cnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3Qi
IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlBy
aW1hcnlDb2xvcnMiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwg
InR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAi
YmxhY2siXSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICJuYW1lIjogImV4ZWN1dGVTUUxBc3luYyIsCi0gICAgICAgICAgICAiYXN5bmMiOiB0cnVl
LAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiB9Ci0gICAgICAgICAgICBdLAotICAg
ICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5O
YW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9
LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFz
ZUlkIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJF
cnJvciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYi
OiAiUHJpbWFyeUNvbG9ycyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFsdGVybmF0
ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdl
bnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAg
IF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5k
cy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMzYxZDU3ZDgyMGRlOTE2YTczY2JkZDk4MzgzZDEyNjQyMDM5OGY0
YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1vcHRp
b25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw4NSAr
MCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAg
ICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCi0gICAgICAgICAgICAidHlw
ZSI6ICJpbnRlZ2VyIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRp
ZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAg
ICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmci
LAotICAgICAgICAgICAgImVudW0iOiBbInJlZCIsICJncmVlbiIsICJibHVlIl0KLSAgICAgICAg
fSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkNvbG9yTGlzdCIsCi0gICAgICAgICAg
ICAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIlByaW1h
cnlDb2xvcnMiIH0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkVy
cm9yIiwKLSAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJk
ZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUu
IiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdLAotICAgICJjb21tYW5kcyI6IFsK
LSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAi
aXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9u
YWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6
ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0
aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIk
cmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRy
ZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwg
Im1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQotICAgICAg
ICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJp
dGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25h
bCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjog
Im9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRp
b25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRy
ZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJl
ZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAi
bWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAg
ICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAi
aXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JM
aXN0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjog
InN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0g
fQotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsg
InR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIs
ICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFt
cCIsICJ0eXBlIjogIm51bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVl
cyIsICJ0eXBlIjogIm9iamVjdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxv
YWQiLCAidHlwZSI6ICJhbnkiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFz
ZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwg
ImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9Ci0gICAgICAg
ICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFu
ZC1zaXplcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOTRhOGVjYjE3NmQzYjhlYzliZjk2Njc2ZTYzY2VhMDUxNDY2Yjg2
OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWlucy13aXRoLXZhcnlp
bmctY29tbWFuZC1zaXplcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotWwot
ewotICAgICJkb21haW4iOiAiTmV0d29yazEiLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAg
ewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMSIsCi0gICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9u
IHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAg
ICB9Ci0gICAgXQotfSwKLXsKLSAgICAiZG9tYWluIjogIk5ldHdvcmsyIiwKLSAgICAidHlwZXMi
OiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJMb2FkZXJJZCIsCi0gICAgICAgICAg
ICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBs
b2FkZXIgaWRlbnRpZmllci4iCi0gICAgICAgIH0KLSAgICBdCi19LAotewotICAgICJkb21haW4i
OiAiTmV0d29yazMiLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAg
Im5hbWUiOiAibG9hZFJlc291cmNlMSIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9h
ZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQg
cGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9LAotICAgICAgICB7
Ci0gICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UyIiwKLSAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24g
dGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAg
IH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTMiLAotICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQg
b2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hl
Y2tzLiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJl
c291cmNlNCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBp
biB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNy
b3NzIG9yaWdpbiBjaGVja3MuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAi
bmFtZSI6ICJsb2FkUmVzb3VyY2U1IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2Fk
cyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBw
YWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCi0gICAgICAgIH0sCi0gICAgICAgIHsK
LSAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTYiLAotICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0
aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAg
fSwKLSAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNyIsCi0gICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBv
ZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVj
a3MuIgotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RhZDYxZGY3YzlmOWM3NmU2OTI4OTdjM2Rm
ZTBiMDgyM2Y5MGU0ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12
YWx1ZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLXsiZG9tYWlucyI6Wwot
ewotICAgICJkb21haW4iOiAiVHlwZURvbWFpbiIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7
Ci0gICAgICAgICAgICAiaWQiOiAiVHlwZURvbWFpbkVudW0iLAotICAgICAgICAgICAgInR5cGUi
OiAic3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJzaGFyZWQiLCAicmVkIiwgImdyZWVu
IiwgImJsdWUiXQotICAgICAgICB9Ci0gICAgXQotfSwKLXsKLSAgICAiZG9tYWluIjogIkNvbW1h
bmREb21haW4iLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgIm5h
bWUiOiAiY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiLAotICAgICAgICAgICAgInBhcmFtZXRl
cnMiOiBbXSwKLSAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicmV0dXJuVmFsdWUiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwg
ImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciXSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0K
LSAgICBdCi19LAotewotICAgICJkb21haW4iOiAiRXZlbnREb21haW4iLAotICAgICJldmVudHMi
OiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImV2ZW50V2l0aEVudW1QYXJhbWV0
ZXIiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwYXJhbWV0ZXIiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwgImJs
YWNrIiwgIndoaXRlIl0gfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQotfQotXX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1l
dGVycy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWJiZjEwYjgzNmY5ZmY3
Y2Q5OTI1ZGI0ZDZiNDFjNWRmYTg3YjQ4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKysrIC9kZXYvbnVsbApA
QCAtMSw1OSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVz
IjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCi0gICAgICAg
ICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1
ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCi0gICAgICAgIH0sCi0gICAgICAgIHsK
LSAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKLSAgICAgICAgICAgICJ0eXBlIjog
InN0cmluZyIsCi0gICAgICAgICAgICAidmFsdWVzIjogWyJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSJd
Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJDb2xvckxpc3QiLAot
ICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJl
ZiI6ICJQcmltYXJ5Q29sb3JzIiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJpZCI6ICJFcnJvciIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCi0gICAgICAgICAgICAicHJvcGVy
dGllcyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJz
dHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCi0gICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJF
cnJvciBjb2RlLiIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXSwKLSAgICAiZXZl
bnRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlT3B0aW9u
YWxQYXJhbWV0ZXJzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6
IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIs
ICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIs
ICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3Ii
LCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0Iiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xv
ciIsICJ0eXBlIjogInN0cmluZyIsICJ2YWx1ZXMiOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxs
b3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAg
IH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycyIsCi0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0
eXBlIjogInN0cmluZyIgfSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAi
dHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAi
LCAidHlwZSI6ICJudW1iZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMi
LCAidHlwZSI6ICJvYmplY3QiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2Fk
IiwgInR5cGUiOiAiYW55IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3Ii
LCAiJHJlZiI6ICJFcnJvciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNv
bG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAidmFsdWVzIjog
WyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQotICAgICAgICAgICAgXQot
ICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmli
dXRlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDVjNDRjNWI5MGUwNTQxZGU2MTJjMzFl
ZjRhNDJlZjg2ODVlYzQ1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdAorKysgL2Rldi9u
dWxsCkBAIC0xLDE3NTQgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdp
dGgtYXN5bmMtYXR0cmlidXRlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotLy8gRGF0YWJhc2UuCi1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGF0YWJh
c2VEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIu
YmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRGF0YWJhc2UiKTsKLUluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJFbnVtKCJEYXRhYmFzZS5QcmltYXJ5Q29sb3JzIiwge1JlZDogInJlZCIsIEdyZWVuOiAi
Z3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5k
KCJEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwgW3sibmFtZSI6
ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5h
bWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbImNv
bHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJk
YXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIs
ICJwcmludENvbG9yIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFi
YXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwgW3sibmFtZSI6ICJkYXRh
YmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAi
cXVlcnkiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbImNvbHVtbk5h
bWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFz
ZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJwcmlu
dENvbG9yIl0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4
ZWN1dGVTUUxTeW5jIiwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwg
Im9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciLCAi
b3B0aW9uYWwiOiBmYWxzZX1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIs
ICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgImFsdGVybmF0
ZUNvbG9ycyIsICJzY3JlZW5Db2xvciIsICJwcmludENvbG9yIl0pOwotSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYyIsIFt7Im5hbWUiOiAi
ZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1l
IjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogZmFsc2V9XSwgWyJjb2x1
bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0
YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVDb2xvcnMiLCAi
cHJpbnRDb2xvciJdKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNl
Iik7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNo
ZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlz
cGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdl
dCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5k
RGlzcGF0Y2hlcjsKLX07Ci0KLQotY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB+QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJ
ZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlk
LCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVT
UUxBc3luYyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5f
cXVlcnkpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1jbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyOwotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotCi1jbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJs
aWM6Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwcmludENvbG9yJyB3aGlsZSBnZW5l
cmF0aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcy4K
LSAgICBlbnVtIGNsYXNzIFByaW50Q29sb3IgewotICAgICAgICBDeWFuID0gMywKLSAgICAgICAg
TWFnZW50YSA9IDQsCi0gICAgICAgIFllbGxvdyA9IDUsCi0gICAgICAgIEJsYWNrID0gNiwKLSAg
ICB9OyAvLyBlbnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlk
LCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9w
dE91dHB1dDxTdHJpbmc+KiBvcHRfb3V0X25vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRP
dXRwdXQ8ZG91YmxlPiogb3B0X291dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9w
dE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG9wdF9vdXRfdmFsdWVzLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIG9w
dF9vdXRfcGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIG9wdF9v
dXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJv
cj4mIG9wdF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9y
KSA9IDA7Ci0gICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxs
YmFjayA6IHB1YmxpYyBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2so
UmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmLCBpbnQgaWQpOwotICAgICAgICB2b2lkIHNlbmRTdWNj
ZXNzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYmIGNvbHVtbk5h
bWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogbm90ZXMsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+KiB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIHZhbHVlcywg
SW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+
KiBwYXlsb2FkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50PiogZGF0YWJhc2VJ
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJv
ciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHNjcmVlbkNvbG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5h
dGVDb2xvcnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBwcmludENv
bG9yKTsKLSAgICB9OwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlcyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IGluX3F1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFj
az4mJiBjYWxsYmFjaykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhFcnJv
clN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywg
U3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3QqIG91dF92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIG91dF9w
YXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRlcm5hdGVDb2xvcnMsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRDb2xvcikg
PSAwOwotICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrIDogcHVibGljIEJhY2tlbmRE
aXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgRXhlY3V0ZVNR
TEFzeW5jQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmLCBpbnQgaWQpOwotICAgICAg
ICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJp
bmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1w
LCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCB2YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3Is
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVy
bmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKTsKLSAgICB9OwotICAgIHZpcnR1
YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiYmIGNh
bGxiYWNrKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+RGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIg
ZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmRE
aXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lk
IGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3Bl
Y3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKLXByaXZhdGU6Ci0gICAgdm9pZCBleGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGV4ZWN1dGVT
UUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0
ZXJzKTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1Ymxp
YzoKLSAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNo
ZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0ZURhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsK
LSNlbmRpZgotcHJpdmF0ZToKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmRE
aXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRy
aWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgot
Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcigpIHsgfQotCi1SZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0
Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3Bh
dGNoZXIsIGFnZW50KSk7Ci19Ci0KLURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OkRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi0gICAgOiBTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQoYWdl
bnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9t
YWluKEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgdGhpcyk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0gICAgUmVmPERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoQVNDSUlMaXRl
cmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7Ci0KLSAgICBpZiAobWV0aG9kID09ICJleGVjdXRl
U1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikKLSAgICAgICAgZXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwotICAgIGVs
c2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKQot
ICAgICAgICBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIFdU
Rk1vdmUocGFyYW1ldGVycykpOwotICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5
bmMiKQotICAgICAgICBleGVjdXRlU1FMU3luYyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVy
cykpOwotICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jIikKLSAgICAgICAg
ZXhlY3V0ZVNRTEFzeW5jKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxz
ZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiRGF0YWJhc2Ui
LCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKLX0KLQotdm9pZCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpCi17Ci0gICAg
aW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFt
ZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyKTsKLSAgICBT
dHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVy
cy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyKTsKLSAgICBpZiAobV9iYWNr
ZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlk
UGFyYW1zLCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2Fu
J3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMiKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7
Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJl
dHVyblZhbHVlcyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gb3V0X2NvbHVtbk5h
bWVzOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+IG91dF9ub3Rl
czsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiBvdXRfdGltZXN0
YW1wOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gb3V0X3ZhbHVlczsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRw
dXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gb3V0X3BheWxvYWQ7Ci0gICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpEYXRh
YmFzZUlkPiBvdXRfZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwotICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRfYWx0ZXJuYXRlQ29sb3Jz
OwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9w
cmludENvbG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRfY29sdW1uTmFtZXMsICZvdXRf
bm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRfZGF0
YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29s
b3JzLCAmb3V0X3ByaW50Q29sb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewotICAg
ICAgICBpZiAob3V0X2NvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRBcnJheShB
U0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG91dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIGlm
IChvdXRfbm90ZXMuaXNBc3NpZ25lZCgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJub3RlcyIpLCBvdXRfbm90ZXMuZ2V0VmFsdWUoKSk7Ci0gICAgICAgIGlm
IChvdXRfdGltZXN0YW1wLmlzQXNzaWduZWQoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0RG91
YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIG91dF90aW1lc3RhbXAuZ2V0VmFsdWUoKSk7
Ci0gICAgICAgIGlmIChvdXRfdmFsdWVzLmlzQXNzaWduZWQoKSkKLSAgICAgICAgICAgIHJlc3Vs
dC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG91dF92YWx1ZXMuZ2V0VmFsdWUo
KSk7Ci0gICAgICAgIGlmIChvdXRfcGF5bG9hZC5pc0Fzc2lnbmVkKCkpCi0gICAgICAgICAgICBy
ZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBvdXRfcGF5bG9hZC5nZXRW
YWx1ZSgpKTsKLSAgICAgICAgaWYgKG91dF9kYXRhYmFzZUlkLmlzQXNzaWduZWQoKSkKLSAgICAg
ICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgb3V0
X2RhdGFiYXNlSWQuZ2V0VmFsdWUoKSk7Ci0gICAgICAgIGlmIChvdXRfc3FsRXJyb3IpCi0gICAg
ICAgICAgICByZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIG91dF9z
cWxFcnJvcik7Ci0gICAgICAgIGlmIChvdXRfc2NyZWVuQ29sb3IuaXNBc3NpZ25lZCgpKQotICAg
ICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBv
dXRfc2NyZWVuQ29sb3IuZ2V0VmFsdWUoKSk7Ci0gICAgICAgIGlmIChvdXRfYWx0ZXJuYXRlQ29s
b3JzKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImFsdGVybmF0
ZUNvbG9ycyIpLCBvdXRfYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICAgICAgaWYgKG91dF9wcmludENv
bG9yLmlzQXNzaWduZWQoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgicHJpbnRDb2xvciIpLCBvdXRfcHJpbnRDb2xvci5nZXRWYWx1ZSgpKTsKLSAgICB9Ci0g
ICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLURhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxi
YWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJlZjxCYWNr
ZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEJhY2tlbmREaXNw
YXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7IH0K
LQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBub3RlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0
T3V0cHV0PGRvdWJsZT4qIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogdmFsdWVzLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIHBheWxvYWQsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgSW5zcGVjdG9y
OjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHByaW50Q29sb3IpCi17Ci0gICAgUmVmPElu
c3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KEFTQ0lJ
TGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOwotICAgIGlmIChub3Rlcy5pc0Fz
c2lnbmVkKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJu
b3RlcyIpLCBub3Rlcy5nZXRWYWx1ZSgpKTsKLSAgICBpZiAodGltZXN0YW1wLmlzQXNzaWduZWQo
KSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFt
cCIpLCB0aW1lc3RhbXAuZ2V0VmFsdWUoKSk7Ci0gICAgaWYgKHZhbHVlcy5pc0Fzc2lnbmVkKCkp
Ci0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwg
dmFsdWVzLmdldFZhbHVlKCkpOwotICAgIGlmIChwYXlsb2FkLmlzQXNzaWduZWQoKSkKLSAgICAg
ICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBwYXlsb2Fk
LmdldFZhbHVlKCkpOwotICAgIGlmIChkYXRhYmFzZUlkLmlzQXNzaWduZWQoKSkKLSAgICAgICAg
anNvbk1lc3NhZ2UtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIGRhdGFi
YXNlSWQuZ2V0VmFsdWUoKSk7Ci0gICAgaWYgKHNxbEVycm9yKQotICAgICAgICBqc29uTWVzc2Fn
ZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgc3FsRXJyb3IpOwotICAgIGlm
IChzY3JlZW5Db2xvci5pc0Fzc2lnbmVkKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBzY3JlZW5Db2xvci5nZXRWYWx1ZSgpKTsK
LSAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXko
QVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBp
ZiAocHJpbnRDb2xvci5pc0Fzc2lnbmVkKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIHByaW50Q29sb3IuZ2V0VmFsdWUoKSk7Ci0g
ICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhXVEZNb3ZlKGpzb25NZXNzYWdlKSk7Ci19Ci0K
LXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFy
YW1ldGVycykKLXsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiks
IG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIp
OwotICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7Ci0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBv
ZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRl
cm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBp
bl9xdWVyeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3Ry
aW5nIGVycm9yOwotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
OjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiBjYWxsYmFjayA9
IGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlci5j
b3B5UmVmKCksIHJlcXVlc3RJZCkpOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2su
Y29weVJlZigpKTsKLQotICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewotICAgICAgICBjYWxsYmFj
ay0+ZGlzYWJsZSgpOwotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotfQotCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1
dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFt
ZXRlcnMpCi17Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBu
dWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRT
dHJpbmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyKTsK
LSAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewotICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVTUUxTeW5j
IikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAg
ICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jKHJlcXVlc3RJZCwgaW5f
ZGF0YWJhc2VJZCwgaW5fcXVlcnkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0K
LSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAgU3RyaW5nIG91dF9ub3Rl
czsKLSAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKLSAgICBJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdCBvdXRfdmFsdWVzOwotICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgb3V0X3BheWxv
YWQ7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQgb3V0X2Rh
dGFiYXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJv
cj4gb3V0X3NxbEVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6Q29sb3JMaXN0PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOwotICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAg
ICBtX2FnZW50LT5leGVjdXRlU1FMU3luYyhlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnks
IG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMs
ICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsIG91dF9hbHRlcm5h
dGVDb2xvcnMsICZvdXRfc2NyZWVuQ29sb3IsICZvdXRfcHJpbnRDb2xvcik7Ci0KLSAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFs
KCJjb2x1bW5OYW1lcyIpLCBvdXRfY29sdW1uTmFtZXMpOwotICAgICAgICByZXN1bHQtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG91dF9ub3Rlcyk7Ci0gICAgICAgIHJlc3VsdC0+
c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIG91dF90aW1lc3RhbXApOwotICAg
ICAgICByZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBvdXRfdmFsdWVz
KTsKLSAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgb3V0
X3BheWxvYWQpOwotICAgICAgICByZXN1bHQtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJkYXRh
YmFzZUlkIiksIG91dF9kYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJzcWxFcnJvciIpLCBvdXRfc3FsRXJyb3IpOwotICAgICAgICByZXN1bHQtPnNl
dEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIG91dF9hbHRlcm5hdGVDb2xv
cnMpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9y
IiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZShvdXRfc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJwcmludENvbG9yIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRDb2xvcikpOwotICAgIH0KLSAgICBpZiAoIWVycm9y
Lmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVx
dWVzdElkLCBXVEZNb3ZlKHJlc3VsdCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8
QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBCYWNrZW5k
RGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURk1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkg
eyB9Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxB
c3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRp
bWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QgdmFsdWVzLCBJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVl
bkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4m
JiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKLXsKLSAgICBSZWY8
SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAganNvbk1lc3NhZ2UtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwg
Y29sdW1uTmFtZXMpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJu
b3RlcyIpLCBub3Rlcyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldERvdWJsZShBU0NJSUxpdGVyYWwo
InRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWVzKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0VmFsdWUo
QVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHBheWxvYWQpOwotICAgIGpzb25NZXNzYWdlLT5zZXRJ
bnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBkYXRhYmFzZUlkKTsKLSAgICBqc29u
TWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgc3FsRXJyb3IpOwot
ICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc2Ny
ZWVuQ29sb3IpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRl
cm5hdGVDb2xvcnMiKSwgYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUocHJpbnRDb2xvcikpOwotICAgIENhbGxiYWNr
QmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOwotfQotCi12b2lkIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKQotewotICAgIGludCBpbl9kYXRhYmFz
ZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCBB
U0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJ
TGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0cik7Ci0gICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXIt
Pmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMiKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
ZXhlY3V0ZVNRTEFzeW5jKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFz
eW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hl
ci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luYyhl
cnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrLmNvcHlSZWYoKSk7Ci0KLSAg
ICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgY2FsbGJhY2stPmRpc2FibGUoKTsKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5j
LWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91
dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1h
c3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaCIKLQotI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kUm91dGVyLmgiCi0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0K
LW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNw
YWNlIERhdGFiYXNlIHsKLWNsYXNzIEVycm9yOwotZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzOwot
fSAvLyBEYXRhYmFzZQotLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5
cGVkZWZzLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLS8qIFVuaXF1ZSBpZGVudGlmaWVyIG9mIERh
dGFiYXNlIG9iamVjdC4gKi8KLXR5cGVkZWYgaW50IERhdGFiYXNlSWQ7Ci10eXBlZGVmIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzPiBDb2xvckxpc3Q7Ci19IC8vIERhdGFiYXNlCi0vLyBFbmQgb2YgdHlwZWRlZnMu
Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1
ZShpbnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUo
c3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhl
bHBlcnMKLQotbmFtZXNwYWNlIERhdGFiYXNlIHsKLS8qICAqLwotZW51bSBjbGFzcyBQcmltYXJ5
Q29sb3JzIHsKLSAgICBSZWQgPSAwLAotICAgIEdyZWVuID0gMSwKLSAgICBCbHVlID0gMiwKLX07
IC8vIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycwotLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFz
cyBFcnJvciA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgewotcHVibGlj
OgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE1lc3NhZ2VT
ZXQgPSAxIDw8IDAsCi0gICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxk
c1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50
IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0luc3BlY3Rvck9i
amVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNT
ZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZnJpZW5kIGNsYXNzIEVycm9yOwotICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBw
cm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJtZXNzYWdlIiksIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJl
YWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwo
ImNvZGUiKSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0Pigp
OwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikg
PT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAg
UmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsK
LSAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4q
PigmcmVzdWx0KSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRl
KCkKLSAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4p
Ci0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBEYXRh
YmFzZQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
UHJvdG9jb2xFbnVtVHlwZT4KLXN0ZDo6b3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotCi0vLyBFbnVtcyBpbiB0aGUgJ0Rh
dGFiYXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5n
Jik7Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRy
aWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0j
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNw
YWNlIFRlc3RIZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3Rh
bnRfdmFsdWVzW10gPSB7Ci0gICAgInJlZCIsCi0gICAgImdyZWVuIiwKLSAgICAiYmx1ZSIsCi0g
ICAgImN5YW4iLAotICAgICJtYWdlbnRhIiwKLSAgICAieWVsbG93IiwKLSAgICAiYmxhY2siLAot
fTsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJu
IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0aGUgJ0RhdGFi
YXNlJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJiBw
cm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVz
W10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnM6OlJlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4sCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUsCi0gICAgfTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5n
ID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAg
IHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMpY29u
c3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQotCi0KLX0gLy8g
bmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5j
LWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLUBwcm90b2NvbCBUZXN0
UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI7Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci0KLWNsYXNzIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDog
cHVibGljIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAg
IE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERh
dGFiYXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQot
ICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcg
cmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9x
dWVyeSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVx
dWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgaW50
IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIG92ZXJyaWRlOwotcHJpdmF0
ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPj4g
bV9kZWxlZ2F0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQg
IlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxl
cj4gX2RhdGFiYXNlSGFuZGxlcjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJv
bGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAg
c2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsK
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19kYXRhYmFz
ZUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNl
dERhdGFiYXNlSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPilo
YW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIgPT0gX2RhdGFiYXNlSGFuZGxlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgW19kYXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgX2RhdGFiYXNl
SGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNo
ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gc3RkOjptYWtlX3VuaXF1
ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyLCBB
bHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPj4oQVNDSUlMaXRlcmFsKCJEYXRhYmFz
ZSIpLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9j
b250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0K
LQotLSAoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPilkYXRhYmFzZUhhbmRs
ZXIKLXsKLSAgICByZXR1cm4gX2RhdGFiYXNlSGFuZGxlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFBy
b3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXREYXRhYmFzZUhhbmRsZXI6KSBpZDxUZXN0UHJv
dG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGRhdGFiYXNlSGFuZGxlcjsKLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1
ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQotewotICAg
IGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9
IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMs
IGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1By
aW50Q29sb3IgKnByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5h
bWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRF
Uihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwg
QCJzcWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9Q
QVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICBp
ZiAoY29sdW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KEFTQ0lJ
TGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVz
KSk7Ci0gICAgICAgIGlmIChub3RlcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgKm5vdGVzKTsKLSAgICAgICAgaWYgKHRpbWVzdGFt
cCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGlt
ZXN0YW1wIiksICp0aW1lc3RhbXApOwotICAgICAgICBpZiAodmFsdWVzKQotICAgICAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgWyp2YWx1ZXMg
dG9JbnNwZWN0b3JPYmplY3RdKTsKLSAgICAgICAgaWYgKHBheWxvYWQpCi0gICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBbKnBheWxvYWQg
dG9JbnNwZWN0b3JPYmplY3RdKTsKLSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAgICAg
ICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksICpk
YXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKHNxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBbKnNxbEVycm9yIHRvSW5z
cGVjdG9yT2JqZWN0XSk7Ci0gICAgICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgdG9Qcm90
b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykK
LSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5h
dGVDb2xvcnMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOwotICAg
ICAgICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9y
KSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IFdURk1vdmUocmVzdWx0T2JqZWN0KSk7Ci0gICAgfTsKLQotICAgIGludCBvX2luX2RhdGFiYXNl
SWQgPSBpbl9kYXRhYmFzZUlkOwotICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7
Ci0KLSAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0
aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxi
YWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOwotfQotCi12
b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQs
IGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCi17Ci0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNT
dHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9y
KTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAg
ICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
Kipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9h
ZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3Is
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsK
LSAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBA
InZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJB
TUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3Jz
LCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAg
ICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwg
aW5zcGVjdG9yU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIGlmIChub3RlcykK
LSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMi
KSwgKm5vdGVzKTsKLSAgICAgICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksICp0aW1lc3RhbXApOwot
ICAgICAgICBpZiAodmFsdWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3Qo
QVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgWyp2YWx1ZXMgdG9JbnNwZWN0b3JPYmplY3RdKTsKLSAg
ICAgICAgaWYgKHBheWxvYWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKEFT
Q0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBbKnBheWxvYWQgdG9JbnNwZWN0b3JPYmplY3RdKTsKLSAg
ICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVn
ZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksICpkYXRhYmFzZUlkKTsKLSAgICAgICAgaWYg
KHNxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRl
cmFsKCJzcWxFcnJvciIpLCBbKnNxbEVycm9yIHRvSW5zcGVjdG9yT2JqZWN0XSk7Ci0gICAgICAg
IGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFT
Q0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3Ip
KTsKLSAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgaW5zcGVjdG9yU3Ry
aW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICBpZiAocHJpbnRDb2xvcikKLSAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xv
ciIpLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSk7
Ci0gICAgfTsKLQotICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwotICAg
IE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KLSAgICBbbV9kZWxlZ2F0ZSBleGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0
YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKLX0KLQotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBp
bl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQotewotICAgIGlkIGVycm9yQ2Fs
bGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8q
PE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0
YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3Fs
RXJyb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMs
IEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
QVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3Fs
RXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
YWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgaW5zcGVjdG9yU3RyaW5n
QXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91
YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHRpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIFt2YWx1ZXMgdG9JbnNw
ZWN0b3JPYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZShBU0NJSUxpdGVy
YWwoInBheWxvYWQiKSwgW3BheWxvYWQgdG9JbnNwZWN0b3JPYmplY3RdKTsKLSAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBkYXRhYmFz
ZUlkKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxF
cnJvciIpLCBbc3FsRXJyb3IgdG9JbnNwZWN0b3JPYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBpbnNwZWN0b3JT
dHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCB0b1Byb3RvY29sU3RyaW5nKHNjcmVl
bkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
cHJpbnRDb2xvciIpLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRP
YmplY3QpKTsKLSAgICB9OwotCi0gICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNl
SWQ7Ci0gICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKLQotICAgIFttX2RlbGVn
YXRlIGV4ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNz
Q2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5
Om9faW5fcXVlcnldOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlk
LCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQotewotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5T
U3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0g
ICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiov
ICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90
b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBp
bnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3Ry
aW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFz
eW5jUHJpbnRDb2xvciBwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdE9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5h
bWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5v
dGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFS
QU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0g
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNv
bG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJh
eShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KGNvbHVt
bk5hbWVzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
bm90ZXMiKSwgbm90ZXMpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZShBU0NJSUxp
dGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOwotICAgICAgICByZXN1bHRPYmplY3QtPnNl
dE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBbdmFsdWVzIHRvSW5zcGVjdG9yT2JqZWN0
XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2Fk
IiksIFtwYXlsb2FkIHRvSW5zcGVjdG9yT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgZGF0YWJhc2VJZCk7Ci0gICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgW3Nx
bEVycm9yIHRvSW5zcGVjdG9yT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5D
b2xvcikpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0
ZXJuYXRlQ29sb3JzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOwot
ICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3Ii
KSwgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSk7Ci0g
ICAgfTsKLQotICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwotICAgIE5T
U3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KLSAgICBbbV9kZWxlZ2F0ZSBleGVjdXRl
U1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVy
eV07Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLXVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0
dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3I7Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzUmVkLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuLAotICAg
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWUsCi19OwotCi10eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW4sCi0gICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xv
ck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQmxhY2ssCi19OwotCi10
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvcikgewotICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbiwK
LSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3csCi0gICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JC
bGFjaywKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMU3luY1ByaW50Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZVNRTFN5bmNQcmludENvbG9yTWFnZW50YSwKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNrLAotfTsKLQotdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yKSB7Ci0g
ICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yQ3lhbiwKLSAg
ICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JNYWdlbnRhLAot
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvclllbGxvdywK
LSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JCbGFjaywK
LX07Ci0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJm
YWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBp
ZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1l
c3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKLS8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKLS8qIHJlcXVp
cmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOwotQGVuZAotCi1A
cHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyIDxOU09iamVjdD4KLUBy
ZXF1aXJlZAotLSAodm9pZClleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVy
cm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywg
TlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFz
ZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRh
dGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OwotLSAodm9p
ZClleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOih2
b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZv
aWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90
ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xv
cnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50
KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7Ci0tICh2b2lkKWV4ZWN1dGVTUUxT
eW5jV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVt
bk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRh
YmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgTlNBcnJheS8qPE5T
U3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycyBzY3JlZW5Db2xvciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50
Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFz
ZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OwotLSAodm9pZClleGVjdXRlU1FMQXN5bmNXaXRo
RXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMs
IE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJu
YXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3Ig
cHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1
ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OwotQGVuZAotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi0K
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlw
ZT4KLU9iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7
Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9ycyB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDoKLSAgICAgICAgcmV0dXJuIEFTQ0lJ
TGl0ZXJhbCgicmVkIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnNHcmVlbjoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiZ3JlZW4iKTsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU6Ci0gICAgICAgIHJldHVybiBB
U0NJSUxpdGVyYWwoImJsdWUiKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0
cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJyZWQiKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOwotICAgIGlmICh2YWx1ZSA9PSAi
Z3JlZW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
R3JlZW47Ci0gICAgaWYgKHZhbHVlID09ICJibHVlIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDsKLX0KLQot
aW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dp
dGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuIEFTQ0lJ
TGl0ZXJhbCgiY3lhbiIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE6Ci0gICAgICAgIHJldHVy
biBBU0NJSUxpdGVyYWwoIm1hZ2VudGEiKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAg
ICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInllbGxvdyIpOwotICAgIGNhc2UgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNr
OgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJibGFjayIpOwotICAgIH0KLX0KLQotdGVt
cGxhdGU8PgotaW5saW5lIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlc1ByaW50Q29sb3IgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJjeWFuIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29s
b3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENv
bG9yTWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmlu
dENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJp
bnRDb2xvckJsYWNrOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENv
bG9yQ3lhbjsKLX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yIHZh
bHVlKQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOgotICAg
ICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJjeWFuIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2Vu
dGE6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIm1hZ2VudGEiKTsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmlu
dENvbG9yWWVsbG93OgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ5ZWxsb3ciKTsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNQcmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImJsYWNr
Iik7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJjeWFuIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbjsKLSAgICBpZiAodmFsdWUgPT0gIm1hZ2VudGEi
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JNYWdlbnRhOwotICAgIGlmICh2YWx1ZSA9PSAieWVs
bG93IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAi
YmxhY2siKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOwotfQotCi1pbmxpbmUgU3RyaW5nIHRv
UHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29s
b3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckN5YW46Ci0gICAgICAgIHJldHVybiBBU0NJ
SUxpdGVyYWwoImN5YW4iKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TFN5bmNQcmludENvbG9yTWFnZW50YToKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgibWFn
ZW50YSIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50
Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInllbGxvdyIpOwotICAg
IGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JCbGFjazoK
LSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYmxhY2siKTsKLSAgICB9Ci19Ci0KLXRlbXBs
YXRlPD4KLWlubGluZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xv
ciBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFs
dWUgPT0gImN5YW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMU3luY1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvck1h
Z2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JZZWxsb3c7Ci0gICAgaWYgKHZh
bHVlID09ICJibGFjayIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxTeW5jUHJpbnRDb2xvckJsYWNrOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckN5YW47
Ci19Ci0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JD
eWFuOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJjeWFuIik7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JNYWdlbnRhOgotICAgICAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsKCJtYWdlbnRhIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVybiBB
U0NJSUxpdGVyYWwoInllbGxvdyIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMQXN5bmNQcmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwo
ImJsYWNrIik7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JDeWFuOwotICAg
IGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JNYWdlbnRhOwotICAgIGlmICh2YWx1ZSA9PSAi
eWVsbG93IikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFz
eW5jUHJpbnRDb2xvclllbGxvdzsKLSAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKLSAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckJsYWNr
OwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JDeWFuOwotfQotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIu
aCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VEYXRhYmFz
ZUlkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZv
aWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5n
PiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VF
cnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VEYXRhYmFzZUlkOihO
U051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7Ci0gICAg
Km91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VQcmlt
YXJ5Q29sb3JzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAot
ewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNs
YXNzXSk7Ci0gICAgKm91dFZhbHVlID0gQChJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KHBheWxvYWQpKTsKLX0KLQotKyAodm9p
ZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0cmluZz4qLyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9
IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZUVy
cm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBb
TlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0j
aW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwot
Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yCi0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICos
IGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAg
ICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkocGF5bG9hZFtAIm1lc3NhZ2UiXSwgQCJtZXNzYWdlIik7Ci0gICAgc2VsZi5tZXNzYWdlID0g
cGF5bG9hZFtAIm1lc3NhZ2UiXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkocGF5bG9hZFtAImNvZGUiXSwgQCJjb2RlIik7Ci0gICAgc2VsZi5jb2RlID0gW3Bh
eWxvYWRbQCJjb2RlIl0gaW50ZWdlclZhbHVlXTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
anNvbk9iamVjdAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnNwZWN0b3JP
YmplY3Q6W2pzb25PYmplY3QgdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlCi17Ci0gICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG1lc3NhZ2UsIEAibWVzc2FnZSIpOwot
Ci0gICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICBzZWxmLmNvZGUgPSBjb2RlOwotCi0g
ICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0TWVzc2FnZTooTlNTdHJpbmcgKiltZXNz
YWdlCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzptZXNzYWdlIGZvcktleTpAIm1lc3NhZ2UiXTsK
LX0KLQotLSAoTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdG
b3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKHZvaWQpc2V0Q29kZTooaW50KWNvZGUKLXsKLSAg
ICBbc3VwZXIgc2V0SW50ZWdlcjpjb2RlIGZvcktleTpAImNvZGUiXTsKLX0KLQotLSAoaW50KWNv
ZGUKLXsKLSAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJjb2RlIl07Ci19Ci0KLUBl
bmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29t
bWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Nv
bW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUyMTM5M2RkNTdmZmViNGY2Y2UxMDQzYzNh
MTQ1ZDY3MmQwMGNhYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVz
dWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTYwOSArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gRGF0YWJhc2UuCi1J
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuUHJpbWFyeUNvbG9ycyIsIHtS
ZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJsdWUifSk7Ci1JbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
cyIsIFt7Im5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwi
OiB0cnVlfSwgeyJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjog
dHJ1ZX0sIHsibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwi
OiB0cnVlfSwgeyJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6
IHRydWV9LCB7Im5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6
IHRydWV9LCB7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25h
bCI6IHRydWV9LCB7Im5hbWUiOiAic3FsRXJyb3IiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9u
YWwiOiB0cnVlfSwgeyJuYW1lIjogInNjcmVlbkNvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgIm9w
dGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAidHlwZSI6ICJvYmpl
Y3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJz
dHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGlt
ZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAi
c2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7Ci1JbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzIiwgW3sibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRp
b25hbCI6IGZhbHNlfSwgeyJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlv
bmFsIjogZmFsc2V9LCB7Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9w
dGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9w
dGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogIm9iamVjdCIsICJv
cHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIi
LCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJzcWxFcnJvciIsICJ0eXBlIjogIm9iamVj
dCIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInNjcmVlbkNvbG9yIiwgInR5cGUiOiAi
c3RyaW5nIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwg
InR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAicHJpbnRDb2xv
ciIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNlfV0sIFsiY29sdW1uTmFtZXMi
LCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQi
LCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29s
b3IiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIpOwotIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVy
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFn
bWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0K
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5k
RGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2Jh
Y2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3Bh
dGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBt
X2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25z
dCBTdHJpbmcqIGNvbnN0IGluX25vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IGluX3RpbWVzdGFt
cCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogY29uc3QgaW5fcGF5bG9hZCwgY29uc3QgaW50KiBjb25z
dCBpbl9kYXRhYmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogaW5fc3Fs
RXJyb3IsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEluc3BlY3Rv
cjo6SW5zcGVjdG9yQXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBjb25z
dCBpbl9wcmludENvbG9yKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYg
aW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3Rh
bXAsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBpbl92YWx1ZXMsIEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9z
Y3JlZW5Db2xvciwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYgaW5fYWx0ZXJuYXRl
Q29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpID0gMDsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJl
dHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQot
Y2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewotcHVibGljOgotICAgIC8v
IE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncHJpbnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21t
YW5kL2V2ZW50IGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMuCi0gICAgZW51bSBjbGFzcyBQ
cmludENvbG9yIHsKLSAgICAgICAgQ3lhbiA9IDMsCi0gICAgICAgIE1hZ2VudGEgPSA0LAotICAg
ICAgICBZZWxsb3cgPSA1LAotICAgICAgICBCbGFjayA9IDYsCi0gICAgfTsgLy8gZW51bSBjbGFz
cyBQcmludENvbG9yCi0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnMoRXJyb3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5KiBvcHRfaW5f
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0X2luX25vdGVzLCBjb25zdCBkb3Vi
bGUqIGNvbnN0IG9wdF9pbl90aW1lc3RhbXAsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0KiBvcHRfaW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBjb25z
dCBvcHRfaW5fcGF5bG9hZCwgY29uc3QgaW50KiBjb25zdCBvcHRfaW5fZGF0YWJhc2VJZCwgY29u
c3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIG9wdF9pbl9zcWxFcnJvciwgY29uc3QgU3Ry
aW5nKiBjb25zdCBvcHRfaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9y
QXJyYXkqIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0X2lu
X3ByaW50Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYg
b3B0X291dF9jb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmlu
Zz4qIG9wdF9vdXRfbm90ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+
KiBvcHRfb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piogb3B0X291dF92YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiogb3B0X291dF9wYXlsb2Fk
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50Piogb3B0X291dF9kYXRhYmFzZUlk
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9z
cWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9w
dF9vdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
Q29sb3JMaXN0PiYgb3B0X291dF9hbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvcHRfb3V0X3ByaW50Q29sb3IpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nJiwgY29u
c3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmlu
ZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0JiBpbl92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgaW5fcGF5bG9h
ZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBp
bl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSW5zcGVjdG9y
OjpJbnNwZWN0b3JBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3By
aW50Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYgb3V0
X2NvbHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogb3V0X3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3V0X2FsdGVybmF0
ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91
dF9wcmludENvbG9yKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+RGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJh
Y2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAg
ICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVm
PEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKLXByaXZhdGU6Ci0gICAgdm9p
ZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFt
ZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVi
bGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KLXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9
OwotI2VuZGlmCi1wcml2YXRlOgotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2Vu
ZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFs
LWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5EYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8RGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcj4gRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRj
aGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
IGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLURhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJh
Y2tlbmREaXNwYXRjaGVyLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQp
Ci0gICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikK
LSAgICAsIG1fYWdlbnQoYWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0
ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgdGhpcyk7Ci19
Ci0KLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2Up
Ci17Ci0gICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwot
Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5n
ZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7Ci0KLSAgICBpZiAo
bWV0aG9kID09ICJleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIikKLSAgICAgICAgZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwot
ICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIikKLSAg
ICAgICAgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJh
bWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmlu
ZygnXCcnLCAiRGF0YWJhc2UiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKLX0K
LQotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRl
cnMpCi17Ci0gICAgYm9vbCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBvcHRfaW5fY29sdW1uTmFtZXMg
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxp
dGVyYWwoImNvbHVtbk5hbWVzIiksICZvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCk7Ci0g
ICAgYm9vbCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0cmluZyBvcHRf
aW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQo
KSwgQVNDSUlMaXRlcmFsKCJub3RlcyIpLCAmb3B0X2luX25vdGVzX3ZhbHVlRm91bmQpOwotICAg
IGJvb2wgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4gb3B0X2luX3RpbWVzdGFtcCA9IG1fYmFja2Vu
ZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInRp
bWVzdGFtcCIpLCAmb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9p
bl92YWx1ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gb3B0X2luX3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVj
dChwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCAmb3B0X2luX3ZhbHVl
c192YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQgPSBmYWxz
ZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gb3B0X2luX3BheWxvYWQg
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxp
dGVyYWwoInBheWxvYWQiKSwgJm9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQpOwotICAgIGJvb2wg
b3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIGludCBvcHRfaW5fZGF0
YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQo
KSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksICZvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZv
dW5kKTsKLSAgICBib29sIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBvcHRfaW5fc3FsRXJyb3IgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFs
KCJzcWxFcnJvciIpLCAmb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0
X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgb3B0X2luX3Nj
cmVlbkNvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0
KCksIEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgJm9wdF9pbl9zY3JlZW5Db2xvcl92YWx1
ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA9IGZh
bHNlOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBvcHRfaW5fYWx0ZXJu
YXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQo
KSwgQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgJm9wdF9pbl9hbHRlcm5hdGVDb2xv
cnNfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kID0g
ZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9pbl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIp
LCAmb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCk7Ci0gICAgaWYgKG1fYmFja2VuZERpc3Bh
dGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywg
U3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHBy
b2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIikpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElk
LCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl9jb2x1bW5OYW1lcy5nZXQo
KSA6IG51bGxwdHIsIG9wdF9pbl9ub3Rlc192YWx1ZUZvdW5kID8gJm9wdF9pbl9ub3RlcyA6IG51
bGxwdHIsIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA/ICZvcHRfaW5fdGltZXN0YW1wIDog
bnVsbHB0ciwgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID8gb3B0X2luX3ZhbHVlcy5nZXQoKSA6
IG51bGxwdHIsIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQgPyBvcHRfaW5fcGF5bG9hZC5nZXQo
KSA6IG51bGxwdHIsIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmb3B0X2luX2RhdGFi
YXNlSWQgOiBudWxscHRyLCBvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA/IG9wdF9pbl9zcWxF
cnJvci5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJm9w
dF9pbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVG
b3VuZCA/IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcHJp
bnRDb2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9wcmludENvbG9yIDogbnVsbHB0cik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1
bW5OYW1lczsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiBvdXRf
bm90ZXM7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4gb3V0X3Rp
bWVzdGFtcDsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IG91dF92YWx1ZXM7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0
T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IG91dF9wYXlsb2FkOwotICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
RGF0YWJhc2VJZD4gb3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwotICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNv
bG9yczsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBv
dXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
KGVycm9yLCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl9jb2x1bW5OYW1l
cy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9ub3Rlc192YWx1ZUZvdW5kID8gJm9wdF9pbl9ub3Rl
cyA6IG51bGxwdHIsIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA/ICZvcHRfaW5fdGltZXN0
YW1wIDogbnVsbHB0ciwgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID8gb3B0X2luX3ZhbHVlcy5n
ZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQgPyBvcHRfaW5fcGF5bG9h
ZC5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmb3B0X2lu
X2RhdGFiYXNlSWQgOiBudWxscHRyLCBvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA/IG9wdF9p
bl9zcWxFcnJvci5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5k
ID8gJm9wdF9pbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNf
dmFsdWVGb3VuZCA/IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMuZ2V0KCkgOiBudWxscHRyLCBvcHRf
aW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9wcmludENvbG9yIDogbnVsbHB0ciwg
b3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywg
Jm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5D
b2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgJm91dF9wcmludENvbG9yKTsKLQotICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKG91dF9jb2x1bW5OYW1lcykKLSAgICAgICAg
ICAgIHJlc3VsdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBvdXRfY29s
dW1uTmFtZXMpOwotICAgICAgICBpZiAob3V0X25vdGVzLmlzQXNzaWduZWQoKSkKLSAgICAgICAg
ICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgb3V0X25vdGVzLmdl
dFZhbHVlKCkpOwotICAgICAgICBpZiAob3V0X3RpbWVzdGFtcC5pc0Fzc2lnbmVkKCkpCi0gICAg
ICAgICAgICByZXN1bHQtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCBvdXRf
dGltZXN0YW1wLmdldFZhbHVlKCkpOwotICAgICAgICBpZiAob3V0X3ZhbHVlcy5pc0Fzc2lnbmVk
KCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIp
LCBvdXRfdmFsdWVzLmdldFZhbHVlKCkpOwotICAgICAgICBpZiAob3V0X3BheWxvYWQuaXNBc3Np
Z25lZCgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxv
YWQiKSwgb3V0X3BheWxvYWQuZ2V0VmFsdWUoKSk7Ci0gICAgICAgIGlmIChvdXRfZGF0YWJhc2VJ
ZC5pc0Fzc2lnbmVkKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldEludGVnZXIoQVNDSUlMaXRl
cmFsKCJkYXRhYmFzZUlkIiksIG91dF9kYXRhYmFzZUlkLmdldFZhbHVlKCkpOwotICAgICAgICBp
ZiAob3V0X3NxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRl
cmFsKCJzcWxFcnJvciIpLCBvdXRfc3FsRXJyb3IpOwotICAgICAgICBpZiAob3V0X3NjcmVlbkNv
bG9yLmlzQXNzaWduZWQoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgic2NyZWVuQ29sb3IiKSwgb3V0X3NjcmVlbkNvbG9yLmdldFZhbHVlKCkpOwotICAgICAg
ICBpZiAob3V0X2FsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXko
QVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgb3V0X2FsdGVybmF0ZUNvbG9ycyk7Ci0g
ICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5pc0Fzc2lnbmVkKCkpCi0gICAgICAgICAgICByZXN1
bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgb3V0X3ByaW50Q29sb3Iu
Z2V0VmFsdWUoKSk7Ci0gICAgfQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0
KSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwot
fQotCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0
ZXJzKQotewotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBpbl9jb2x1bW5O
YW1lcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksIEFT
Q0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX25vdGVz
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJ
TGl0ZXJhbCgibm90ZXMiKSwgbnVsbHB0cik7Ci0gICAgZG91YmxlIGluX3RpbWVzdGFtcCA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVy
YWwoInRpbWVzdGFtcCIpLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IGluX3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJh
bWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBudWxscHRyKTsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gaW5fcGF5bG9hZCA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldFZhbHVlKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIp
LCBudWxscHRyKTsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiks
IG51bGxwdHIpOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fc3Fs
RXJyb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwg
QVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fc2NyZWVu
Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwg
QVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JBcnJheT4gaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVD
b2xvcnMiKSwgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3ByaW50Q29sb3IgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJwcmlu
dENvbG9yIiksIG51bGxwdHIpOwotICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90
b2NvbEVycm9ycygpKSB7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIFN0cmluZzo6Zm9ybWF0
KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0
YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIikpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAg
aWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNo
ZXItPmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsICppbl9jb2x1bW5OYW1l
cywgaW5fbm90ZXMsIGluX3RpbWVzdGFtcCwgKmluX3ZhbHVlcywgKmluX3BheWxvYWQsIGluX2Rh
dGFiYXNlSWQsICppbl9zcWxFcnJvciwgaW5fc2NyZWVuQ29sb3IsICppbl9hbHRlcm5hdGVDb2xv
cnMsIGluX3ByaW50Q29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAgU3RyaW5nIG91dF9ub3RlczsK
LSAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKLSAgICBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCBvdXRfdmFsdWVzOwotICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgb3V0X3BheWxvYWQ7
Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQgb3V0X2RhdGFi
YXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4g
b3V0X3NxbEVycm9yOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBt
X2FnZW50LT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoZXJyb3IsICppbl9jb2x1bW5OYW1l
cywgaW5fbm90ZXMsIGluX3RpbWVzdGFtcCwgKmluX3ZhbHVlcywgKmluX3BheWxvYWQsIGluX2Rh
dGFiYXNlSWQsICppbl9zcWxFcnJvciwgaW5fc2NyZWVuQ29sb3IsICppbl9hbHRlcm5hdGVDb2xv
cnMsIGluX3ByaW50Q29sb3IsIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1l
c3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3Fs
RXJyb3IsICZvdXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsICZvdXRfcHJpbnRD
b2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0
QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBvdXRfY29sdW1uTmFtZXMpOwotICAg
ICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG91dF9ub3Rlcyk7
Ci0gICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIG91
dF90aW1lc3RhbXApOwotICAgICAgICByZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZh
bHVlcyIpLCBvdXRfdmFsdWVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVy
YWwoInBheWxvYWQiKSwgb3V0X3BheWxvYWQpOwotICAgICAgICByZXN1bHQtPnNldEludGVnZXIo
QVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG91dF9kYXRhYmFzZUlkKTsKLSAgICAgICAgcmVz
dWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBvdXRfc3FsRXJyb3IpOwot
ICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRf
c2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImFs
dGVybmF0ZUNvbG9ycyIpLCBvdXRfYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICAgICAgcmVzdWx0LT5z
ZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRDb2xvcikpOwotICAg
IH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCkpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJu
LXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJv
dXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
b3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
b3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0K
LS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLWNsYXNzIEVy
cm9yOwotZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzOwotfSAvLyBEYXRhYmFzZQotLy8gRW5kIG9m
IGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNwYWNlIERhdGFi
YXNlIHsKLS8qIFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KLXR5cGVk
ZWYgaW50IERhdGFiYXNlSWQ7Ci10eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBDb2xvckxpc3Q7Ci19
IC8vIERhdGFiYXNlCi0vLyBFbmQgb2YgdHlwZWRlZnMuCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVy
cyB7Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKLXsK
LSAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFs
dWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotbmFtZXNwYWNlIERhdGFi
YXNlIHsKLS8qICAqLwotZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzIHsKLSAgICBSZWQgPSAwLAot
ICAgIEdyZWVuID0gMSwKLSAgICBCbHVlID0gMiwKLX07IC8vIGVudW0gY2xhc3MgUHJpbWFyeUNv
bG9ycwotLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0gewotICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCi0gICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCi0gICAgICAgIENv
ZGVTZXQgPSAxIDw8IDEsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29k
ZVNldCkKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxk
ZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVz
dWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAg
IEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCi0gICAgICAg
ICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOwot
ICAgIHB1YmxpYzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1l
c3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlf
c2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXNz
YWdlIiksIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4o
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29k
ZShpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImNvZGUiKSwgdmFsdWUpOwotICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAg
UmVmPEVycm9yPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVj
dCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIHJldHVybiBXVEZN
b3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxFcnJvcj4qPigmcmVzdWx0KSk7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgLyoKLSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICog
UmVmPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldE1lc3Nh
Z2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7
Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAg
ewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBEYXRhYmFzZQotCi0KLQotbmFtZXNwYWNlIFRl
c3RIZWxwZXJzIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLXN0ZDo6
b3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0
IFN0cmluZyYpOwotCi0vLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KLXRlbXBsYXRl
PD4KLXN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFRl
c3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLW5hbWVzcGFjZSBUZXN0
SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVl
c1tdID0gewotICAgICJyZWQiLAotICAgICJncmVlbiIsCi0gICAgImJsdWUiLAotICAgICJjeWFu
IiwKLSAgICAibWFnZW50YSIsCi0gICAgInllbGxvdyIsCi0gICAgImJsYWNrIiwKLX07Ci0KLVN0
cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewotICAgIHJldHVybiBlbnVtX2Nv
bnN0YW50X3ZhbHVlc1tjb2RlXTsKLX0KLQotLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9t
YWluCi10ZW1wbGF0ZTw+Ci1zdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xT
dHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewot
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzOjpSZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM6OkdyZWVuLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpCbHVlLAotICAgIH07Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCAzOyArK2kpCi0gICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVt
X2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4g
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50VmFs
dWVzW2ldOwotCi0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQotCi19IC8vIG5hbWVzcGFj
ZSBUZXN0SGVscGVycwotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxs
LXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQHByb3Rv
Y29sIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcjsKLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIg
ZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJs
aWM6Ci0gICAgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFBy
b3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5k
bGVyOyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkqIGluX2NvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX25vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IGlu
X3RpbWVzdGFtcCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIGluX3ZhbHVlcywg
Y29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogY29uc3QgaW5fcGF5bG9hZCwgY29uc3Qg
aW50KiBjb25zdCBpbl9kYXRhYmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fc2NyZWVuQ29sb3IsIGNvbnN0
IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3Ry
aW5nKiBjb25zdCBpbl9wcmludENvbG9yKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBJbnNwZWN0b3I6
Okluc3BlY3RvckFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3Rlcywg
ZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIGlu
X3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0
YWJhc2VJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIGluX3NxbEVycm9yLCBj
b25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFy
cmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikgb3Zl
cnJpZGU7Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURv
bWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBh
cmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAg
ICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRl
c3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gX2RhdGFiYXNlSGFuZGxlcjsKLX0KLQot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBp
ZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwot
ICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
dm9pZClkZWFsbG9jCi17Ci0gICAgW19kYXRhYmFzZUhhbmRsZXIgcmVsZWFzZV07Ci0gICAgW3N1
cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXNldERhdGFiYXNlSGFuZGxlcjooaWQ8VGVzdFBy
b3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhhbmRsZXIg
PT0gX2RhdGFiYXNlSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW19kYXRhYmFzZUhh
bmRsZXIgcmVsZWFzZV07Ci0gICAgX2RhdGFiYXNlSGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07
Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iakNJ
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKLSAgICBhdXRvIGFs
dGVybmF0ZUFnZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2Vu
dDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyPj4oQVNDSUlMaXRlcmFsKCJEYXRhYmFzZSIpLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUo
YWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50
KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVzdFByb3RvY29sRGF0YWJh
c2VEb21haW5IYW5kbGVyPilkYXRhYmFzZUhhbmRsZXIKLXsKLSAgICByZXR1cm4gX2RhdGFiYXNl
SGFuZGxlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25h
bC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgot
Ci1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywg
cmV0YWluLCBzZXR0ZXI9c2V0RGF0YWJhc2VIYW5kbGVyOikgaWQ8VGVzdFByb3RvY29sRGF0YWJh
c2VEb21haW5IYW5kbGVyPiBkYXRhYmFzZUhhbmRsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZp
Zy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVl
c3RJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSogaW5fY29sdW1uTmFtZXMsIGNv
bnN0IFN0cmluZyogY29uc3QgaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogY29uc3QgaW5fdGltZXN0
YW1wLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBJ
bnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBjb25zdCBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGNv
bnN0IGluX2RhdGFiYXNlSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBpbl9z
cWxFcnJvciwgY29uc3QgU3RyaW5nKiBjb25zdCBpbl9zY3JlZW5Db2xvciwgY29uc3QgSW5zcGVj
dG9yOjpJbnNwZWN0b3JBcnJheSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGNv
bnN0IGluX3ByaW50Q29sb3IpCi17Ci0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9Owot
Ci0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1
bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50
ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgewotICAgICAgICBSZWY8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29s
dW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfT1BUSU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0g
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2Fk
LCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRl
Q29sb3JzIik7Ci0gICAgICAgIGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBpbnNwZWN0b3JTdHJp
bmdBcnJheSgqY29sdW1uTmFtZXMpKTsKLSAgICAgICAgaWYgKG5vdGVzKQotICAgICAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCAqbm90ZXMpOwot
ICAgICAgICBpZiAodGltZXN0YW1wKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3Vi
bGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgKnRpbWVzdGFtcCk7Ci0gICAgICAgIGlmICh2
YWx1ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwo
InZhbHVlcyIpLCBbKnZhbHVlcyB0b0luc3BlY3Rvck9iamVjdF0pOwotICAgICAgICBpZiAocGF5
bG9hZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJw
YXlsb2FkIiksIFsqcGF5bG9hZCB0b0luc3BlY3Rvck9iamVjdF0pOwotICAgICAgICBpZiAoZGF0
YWJhc2VJZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVy
YWwoImRhdGFiYXNlSWQiKSwgKmRhdGFiYXNlSWQpOwotICAgICAgICBpZiAoc3FsRXJyb3IpCi0g
ICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9y
IiksIFsqc3FsRXJyb3IgdG9JbnNwZWN0b3JPYmplY3RdKTsKLSAgICAgICAgaWYgKHNjcmVlbkNv
bG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJz
Y3JlZW5Db2xvciIpLCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOwotICAgICAgICBp
ZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheShB
U0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheSgqYWx0
ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAgIGlmIChwcmludENvbG9yKQotICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIHRvUHJvdG9j
b2xTdHJpbmcoKnByaW50Q29sb3IpKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpKTsKLSAgICB9OwotCi0g
ICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2NvbHVtbk5hbWVzOwotICAgIGlmIChpbl9j
b2x1bW5OYW1lcykKLSAgICAgICAgb19pbl9jb2x1bW5OYW1lcyA9IG9iamNTdHJpbmdBcnJheShp
bl9jb2x1bW5OYW1lcyk7Ci0gICAgTlNTdHJpbmcgKm9faW5fbm90ZXM7Ci0gICAgaWYgKGluX25v
dGVzKQotICAgICAgICBvX2luX25vdGVzID0gKmluX25vdGVzOwotICAgIGRvdWJsZSBvX2luX3Rp
bWVzdGFtcDsKLSAgICBpZiAoaW5fdGltZXN0YW1wKQotICAgICAgICBvX2luX3RpbWVzdGFtcCA9
ICppbl90aW1lc3RhbXA7Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3ZhbHVlczsK
LSAgICBpZiAoaW5fdmFsdWVzKQotICAgICAgICBvX2luX3ZhbHVlcyA9IFtbW1JXSVByb3RvY29s
SlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6aW5fdmFsdWVzXSBhdXRv
cmVsZWFzZV07Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3BheWxvYWQ7Ci0gICAg
aWYgKGluX3BheWxvYWQpCi0gICAgICAgIG9faW5fcGF5bG9hZCA9IFtbW1JXSVByb3RvY29sSlNP
Tk9iamVjdCBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6aW5fcGF5bG9hZF0gYXV0b3Jl
bGVhc2VdOwotICAgIGludCBvX2luX2RhdGFiYXNlSWQ7Ci0gICAgaWYgKGluX2RhdGFiYXNlSWQp
Ci0gICAgICAgIG9faW5fZGF0YWJhc2VJZCA9ICppbl9kYXRhYmFzZUlkOwotICAgIFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgKm9faW5fc3FsRXJyb3I7Ci0gICAgaWYgKGluX3NxbEVycm9yKQot
ICAgICAgICBvX2luX3NxbEVycm9yID0gW1tbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxv
Y10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6aW5fc3FsRXJyb3JdIGF1dG9yZWxlYXNlXTsKLSAg
ICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgb19pbl9zY3JlZW5Db2xvcjsKLSAg
ICBpZiAoaW5fc2NyZWVuQ29sb3IpCi0gICAgICAgIG9faW5fc2NyZWVuQ29sb3IgPSBmcm9tUHJv
dG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPigqaW5fc2NyZWVu
Q29sb3IpOwotICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9hbHRlcm5hdGVDb2xvcnM7
Ci0gICAgaWYgKGluX2FsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgb19pbl9hbHRlcm5hdGVDb2xv
cnMgPSBvYmpjU3RyaW5nQXJyYXkoaW5fYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIG9faW5fcHJp
bnRDb2xvcjsKLSAgICBpZiAoaW5fcHJpbnRDb2xvcikKLSAgICAgICAgb19pbl9wcmludENvbG9y
ID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+KCppbl9wcmludENvbG9yKTsKLQotICAgIFttX2RlbGVn
YXRlIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KGluX2Nv
bHVtbk5hbWVzID8gJm9faW5fY29sdW1uTmFtZXMgOiBuaWwpIG5vdGVzOihpbl9ub3RlcyA/ICZv
X2luX25vdGVzIDogbmlsKSB0aW1lc3RhbXA6KGluX3RpbWVzdGFtcCA/ICZvX2luX3RpbWVzdGFt
cCA6IG5pbCkgdmFsdWVzOihpbl92YWx1ZXMgPyAmb19pbl92YWx1ZXMgOiBuaWwpIHBheWxvYWQ6
KGluX3BheWxvYWQgPyAmb19pbl9wYXlsb2FkIDogbmlsKSBkYXRhYmFzZUlkOihpbl9kYXRhYmFz
ZUlkID8gJm9faW5fZGF0YWJhc2VJZCA6IG5pbCkgc3FsRXJyb3I6KGluX3NxbEVycm9yID8gJm9f
aW5fc3FsRXJyb3IgOiBuaWwpIHNjcmVlbkNvbG9yOihpbl9zY3JlZW5Db2xvciA/ICZvX2luX3Nj
cmVlbkNvbG9yIDogbmlsKSBhbHRlcm5hdGVDb2xvcnM6KGluX2FsdGVybmF0ZUNvbG9ycyA/ICZv
X2luX2FsdGVybmF0ZUNvbG9ycyA6IG5pbCkgcHJpbnRDb2xvcjooaW5fcHJpbnRDb2xvciA/ICZv
X2luX3ByaW50Q29sb3IgOiBuaWwpXTsKLX0KLQotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29u
c3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3QmIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBp
bl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBJ
bnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmlu
ZyYgaW5fcHJpbnRDb2xvcikKLXsKLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAq
ZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0K
LSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1u
TmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
YWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3IgcHJpbnRDb2xvcikgewotICAgICAgICBSZWY8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1
bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
Uihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIp
OwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihhbHRlcm5h
dGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheShj
b2x1bW5OYW1lcykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoIm5vdGVzIiksIG5vdGVzKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoQVND
SUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdGltZXN0YW1wKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgW3ZhbHVlcyB0b0luc3BlY3Rvck9i
amVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5
bG9hZCIpLCBbcGF5bG9hZCB0b0luc3BlY3Rvck9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIGRhdGFiYXNlSWQpOwot
ICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiks
IFtzcWxFcnJvciB0b0luc3BlY3Rvck9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNl
dFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIHRvUHJvdG9jb2xTdHJpbmcoc2Ny
ZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwo
ImFsdGVybmF0ZUNvbG9ycyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMp
KTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENv
bG9yIiksIHRvUHJvdG9jb2xTdHJpbmcocHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCkp
OwotICAgIH07Ci0KLSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fY29sdW1uTmFtZXMg
PSBvYmpjU3RyaW5nQXJyYXkoJmluX2NvbHVtbk5hbWVzKTsKLSAgICBOU1N0cmluZyAqb19pbl9u
b3RlcyA9IGluX25vdGVzOwotICAgIGRvdWJsZSBvX2luX3RpbWVzdGFtcCA9IGluX3RpbWVzdGFt
cDsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fdmFsdWVzID0gW1tbUldJUHJvdG9j
b2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDomaW5fdmFsdWVzXSBh
dXRvcmVsZWFzZV07Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3BheWxvYWQgPSBb
W1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0OiZp
bl9wYXlsb2FkXSBhdXRvcmVsZWFzZV07Ci0gICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2Rh
dGFiYXNlSWQ7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqb19pbl9zcWxFcnJvciA9
IFtbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2Jq
ZWN0OiZpbl9zcWxFcnJvcl0gYXV0b3JlbGVhc2VdOwotICAgIFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9ycyBvX2luX3NjcmVlbkNvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oaW5fc2NyZWVuQ29sb3IpOwotICAgIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqb19pbl9hbHRlcm5hdGVDb2xvcnMgPSBvYmpjU3RyaW5nQXJyYXko
JmluX2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIG9faW5fcHJpbnRDb2xvciA9IGZyb21Qcm90b2Nv
bFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3I+KGluX3ByaW50Q29sb3IpOwotCi0gICAgW21fZGVsZWdhdGUgZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOm9faW5fY29sdW1uTmFtZXMgbm90ZXM6
b19pbl9ub3RlcyB0aW1lc3RhbXA6b19pbl90aW1lc3RhbXAgdmFsdWVzOm9faW5fdmFsdWVzIHBh
eWxvYWQ6b19pbl9wYXlsb2FkIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHNxbEVycm9yOm9f
aW5fc3FsRXJyb3Igc2NyZWVuQ29sb3I6b19pbl9zY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6
b19pbl9hbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjpvX2luX3ByaW50Q29sb3JdOwotfQotCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnRE
aXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0
aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgot
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotQGNs
YXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I7Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzKSB7Ci0gICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9yc0dyZWVuLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0Js
dWUsCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7Ci0gICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4sCi0g
ICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2ssCi19OwotCi10eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4sCi0gICAgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclll
bGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yQmxhY2ssCi19OwotCi10eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IpIHsK
LSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JDeWFuLAotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvck1hZ2VudGEsCi0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93LAotICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrLAotfTsKLQot
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbiwKLSAgICBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhLAot
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvclllbGxvdywKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JCbGFjaywKLX07Ci0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBS
V0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5T
RGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0g
KGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihp
bnQpY29kZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0
cmluZyAqbWVzc2FnZTsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3Np
Z24pIGludCBjb2RlOwotQGVuZAotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21h
aW5IYW5kbGVyIDxOU09iamVjdD4KLUByZXF1aXJlZAotLSAodm9pZClleGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSll
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5
bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJy
b3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikpc3VjY2Vz
c0NhbGxiYWNrIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29sdW1uTmFt
ZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlICopdGltZXN0YW1w
IHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90
b2NvbEpTT05PYmplY3QgKiopcGF5bG9hZCBkYXRhYmFzZUlkOihpbnQgKilkYXRhYmFzZUlkIHNx
bEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9yIHNjcmVlbkNvbG9y
OihUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKilzY3JlZW5Db2xvciBhbHRlcm5h
dGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRD
b2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvciAqKXByaW50Q29sb3I7Ci0tICh2b2lkKWV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
c1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5O
YW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJh
c2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICph
bHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5v
dGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIGRh
dGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycylzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IpcHJpbnRDb2xvcjsKLUBlbmQKLQotCi0KLQot
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgot
I2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNp
bXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KLQotbmFt
ZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KLU9i
akNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLQot
aW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9ycyB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJh
bCgicmVkIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNHcmVl
bjoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiZ3JlZW4iKTsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU6Ci0gICAgICAgIHJldHVybiBBU0NJSUxp
dGVyYWwoImJsdWUiKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJyZWQiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOwotICAgIGlmICh2YWx1ZSA9PSAiZ3JlZW4i
KQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW47
Ci0gICAgaWYgKHZhbHVlID09ICJibHVlIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDsKLX0KLQotaW5saW5l
IFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7
Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiY3lhbiIpOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvck1hZ2VudGE6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIm1hZ2VudGEi
KTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInllbGxv
dyIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJibGFj
ayIpOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJjeWFuIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yTWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJs
YWNrOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjsKLX0KLQot
aW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZh
bHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yQ3lhbjoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiY3lh
biIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIm1h
Z2VudGEiKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwo
InllbGxvdyIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFs
KCJibGFjayIpOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJjeWFuIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yTWFnZW50YTsKLSAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvckJsYWNrOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjsK
LX0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciB2YWx1ZSkKLXsKLSAgICBzd2l0
Y2godmFsdWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW46Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwo
ImN5YW4iKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwo
Im1hZ2VudGEiKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJh
bCgieWVsbG93Iik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJh
bCgiYmxhY2siKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJjeWFuIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvckN5YW47Ci0gICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvck1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yWWVsbG93OwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
QmxhY2s7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47Ci19Ci0K
LWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZh
bHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JDeWFuOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJjeWFu
Iik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1ByaW50Q29sb3JNYWdlbnRhOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJtYWdl
bnRhIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInll
bGxvdyIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnNQcmludENvbG9yQmxhY2s6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImJs
YWNrIik7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIGZyb21Qcm90b2NvbFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiY3lhbiIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JNYWdlbnRhOwotICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKLSAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
clllbGxvdzsKLSAgICBpZiAodmFsdWUgPT0gImJsYWNrIikKLSAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNr
OwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOwotfQotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRp
b25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21h
aW4pCi0KLSsgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TTnVt
YmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VD
b2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxl
bWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0K
LSsgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxv
YWQsIFtOU051bWJlciBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxv
YWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9yczooTlNOdW1iZXIgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IEAoSW5z
cGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzPihwYXlsb2FkKSk7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5
bG9hZDsKLX0KLQotKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOwotICAgICpv
dXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXls
b2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1t
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25h
bC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
LSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0j
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbXBvcnQgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9h
ZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmls
OwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Ai
bWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKLSAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVz
c2FnZSJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0AiY29kZSJdLCBAImNvZGUiKTsKLSAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUi
XSBpbnRlZ2VyVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Ci17
Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbanNvbk9i
amVjdCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQot
ICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihO
U1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7Ci0KLSAgICBzZWxmLm1l
c3NhZ2UgPSBtZXNzYWdlOwotICAgIHNlbGYuY29kZSA9IGNvZGU7Ci0KLSAgICByZXR1cm4gc2Vs
ZjsKLX0KLQotLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBb
c3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tIChOU1N0
cmluZyAqKW1lc3NhZ2UKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3Nh
Z2UiXTsKLX0KLQotLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQotewotICAgIFtzdXBlciBzZXRJ
bnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOwotfQotCi0tIChpbnQpY29kZQotewotICAgIHJl
dHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKLX0KLQotQGVuZAotCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFy
eWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZTFj
ZTYyMDRkY2M3YTdjN2VhNWEwZDk2NTdhODgyOTlkZWMwMzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6
ZXMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMzk4ICswLDAgQEAKLSMjIyBCZWdp
biBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gTmV0d29yazEuCi1J
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazEubG9hZFJlc291cmNlMSIs
IFtdLCBbXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMSIpOwot
Ci0vLyBOZXR3b3JrMy4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3Jr
My5sb2FkUmVzb3VyY2UxIiwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21t
YW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UyIiwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UzIiwgW10sIFtdKTsKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U0IiwgW10s
IFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVz
b3VyY2U1IiwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3
b3JrMy5sb2FkUmVzb3VyY2U2IiwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJD
b21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U3IiwgW10sIFtdKTsKLUluc3BlY3RvckJhY2tl
bmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmszIik7Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJh
Y2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgot
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJs
aWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNo
ZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRj
aGVyKTsgfQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVm
UHRyPEJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFz
cyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEo
bG9uZyBjYWxsSWQpID0gMDsKLX07Ci1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAg
ICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgbG9hZFJlc291cmNlMihsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBs
b2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNv
dXJjZTQobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNShs
b25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgY2Fs
bElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBjYWxsSWQpID0g
MDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRo
LXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLWNsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXI7Ci1jbGFzcyBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOwotI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi1jbGFzcyBO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmly
dHVhbCB+TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKLX07Ci0KLWNsYXNzIE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZv
aWQgbG9hZFJlc291cmNlMShFcnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9h
ZFJlc291cmNlMihFcnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlMyhFcnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChF
cnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNShFcnJvclN0
cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNihFcnJvclN0cmluZyYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNyhFcnJvclN0cmluZyYpID0gMDsK
LXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIH5OZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
cigpOwotfTsKLQotY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1Ymxp
YyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYm
IG1lc3NhZ2UpIG92ZXJyaWRlOwotcHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0jaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi1wdWJsaWM6Ci0gICAgdm9p
ZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJu
YXRlRGlzcGF0Y2hlcjsgfQotcHJpdmF0ZToKLSAgICBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyKiBtX2FsdGVybmF0ZURpc3BhdGNoZXIgeyBudWxscHRyIH07Ci0jZW5kaWYKLXBy
aXZhdGU6Ci0gICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYs
IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQgeyBudWxscHRyIH07Ci19OwotCi1jbGFzcyBOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmRE
aXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7Ci1w
cml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAg
dm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNv
dXJjZTUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVy
cyk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXB1YmxpYzoKLSAgICB2b2lkIHNl
dEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciog
YWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVE
aXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKLSNlbmRpZgotcHJpdmF0
ZToKLSAgICBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICBOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1OZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkg
eyB9Ci1OZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0KLVJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tl
bmREaXNwYXRjaGVyLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihiYWNr
ZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3Bh
dGNoZXIsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9h
Z2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNo
ZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrMSIpLCB0aGlzKTsKLX0KLQotdm9pZCBO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3Qg
U3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKLXsKLSAgICBS
ZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdChB
U0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmIChtZXRob2QgPT0g
ImxvYWRSZXNvdXJjZTEiKQotICAgICAgICBsb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCwgV1RGTW92
ZShwYXJhbWV0ZXJzKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFr
ZVN0cmluZygnXCcnLCAiTmV0d29yazEiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIp
KTsKLX0KLQotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmKQotewotI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotICAgIGlmIChtX2FsdGVybmF0ZURpc3Bh
dGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKHJl
cXVlc3RJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEVycm9yU3Ry
aW5nIGVycm9yOwotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMShlcnJvcik7Ci0KLSAg
ICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCkpOwotICAgIGVsc2UKLSAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotUmVmPE5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI+IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi1OZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVy
JiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNo
ZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
Z2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIk5ldHdvcmszIiksIHRoaXMp
OwotfQotCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVx
dWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNz
YWdlKQotewotICAgIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlz
KTsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2Fn
ZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOwotCi0gICAg
dHlwZWRlZiB2b2lkIChOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpOwotICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8RGlzcGF0Y2hNYXA+IGRpc3BhdGNoTWFwOwotICAgIGlmIChkaXNw
YXRjaE1hcC5nZXQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBN
ZXRob2RUYWJsZSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lOwotICAgICAgICAgICAg
Q2FsbEhhbmRsZXIgaGFuZGxlcjsKLSAgICAgICAgfSBjb21tYW5kc1tdID0gewotICAgICAgICAg
ICAgeyAibG9hZFJlc291cmNlMSIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2UxIH0sCi0gICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2UyIiwgJk5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIgfSwKLSAgICAgICAgICAgIHsgImxvYWRSZXNvdXJj
ZTMiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyB9LAotICAgICAg
ICAgICAgeyAibG9hZFJlc291cmNlNCIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2U0IH0sCi0gICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2U1IiwgJk5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUgfSwKLSAgICAgICAgICAgIHsgImxvYWRSZXNv
dXJjZTYiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNiB9LAotICAg
ICAgICAgICAgeyAibG9hZFJlc291cmNlNyIsICZOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2U3IH0sCi0gICAgICAgIH07Ci0gICAgICAgIHNpemVfdCBsZW5ndGggPSBXVEZf
QVJSQVlfTEVOR1RIKGNvbW1hbmRzKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGRpc3BhdGNoTWFwLmdldCgpLmFkZChjb21tYW5kc1tp
XS5uYW1lLCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKLSAgICB9Ci0KLSAgICBhdXRvIGZpbmRSZXN1
bHQgPSBkaXNwYXRjaE1hcC5nZXQoKS5maW5kKG1ldGhvZCk7Ci0gICAgaWYgKGZpbmRSZXN1bHQg
PT0gZGlzcGF0Y2hNYXAuZ2V0KCkuZW5kKCkpIHsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
IG1ha2VTdHJpbmcoJ1wnJywgIk5ldHdvcmszIiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91
bmQiKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAoKCp0aGlzKS4qZmluZFJlc3Vs
dC0+dmFsdWUpKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci19Ci0KLXZvaWQgTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMShyZXF1ZXN0SWQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgV1RGTW92ZShyZXN1bHQpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBX
VEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikKLXsK
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9h
bHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9h
ZFJlc291cmNlMihyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0K
LSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTIo
ZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKLSAgICBl
bHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQg
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAg
ICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMyhyZXF1ZXN0SWQpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTMoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikK
LXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
bG9hZFJlc291cmNlNChyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlm
Ci0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJj
ZTQoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZv
aWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0g
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNShyZXF1ZXN0SWQpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsK
LSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTUoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJl
cXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6bG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
JikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBp
ZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+bG9hZFJlc291cmNlNihyZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vu
ZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNv
dXJjZTYoZXJyb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0K
LXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7
Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNyhyZXF1ZXN0SWQp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJv
cjsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTcoZXJyb3IpOwotCi0gICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVk
ZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2UgUHJv
dG9jb2wgewotCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1lc3BhY2UgTmV0d29yazIgewotLyogVW5p
cXVlIGxvYWRlciBpZGVudGlmaWVyLiAqLwotdHlwZWRlZiBTdHJpbmcgTG9hZGVySWQ7Ci19IC8v
IE5ldHdvcmsyCi0vLyBFbmQgb2YgdHlwZWRlZnMuCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQot
Ci0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazFEb21h
aW5IYW5kbGVyOwotQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcjsK
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7
IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEo
bG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRlOwotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8aWQ8VGVz
dFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLQotCi1j
bGFzcyBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1Ymxp
YyBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBPYmpD
SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3Jr
M0RvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7
Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhh
bmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFn
ZW50Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xOZXR3b3Jr
MURvbWFpbkhhbmRsZXI+IF9uZXR3b3JrMUhhbmRsZXI7Ci0gICAgaWQ8VGVzdFByb3RvY29sTmV0
d29yazNEb21haW5IYW5kbGVyPiBfbmV0d29yazNIYW5kbGVyOwotfQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNv
bnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xs
ZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MK
LXsKLSAgICBbX25ldHdvcmsxSGFuZGxlciByZWxlYXNlXTsKLSAgICBbX25ldHdvcmszSGFuZGxl
ciByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0TmV0d29y
azFIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+KWhhbmRsZXIK
LXsKLSAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29yazFIYW5kbGVyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBbX25ldHdvcmsxSGFuZGxlciByZWxlYXNlXTsKLSAgICBfbmV0d29yazFIYW5kbGVy
ID0gW2hhbmRsZXIgcmV0YWluXTsKLQotICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IHN0
ZDo6bWFrZV91bmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+KGhh
bmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFsdGVy
bmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0
ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+PihBU0NJSUxpdGVyYWwoIk5ldHdvcmsxIiksICpf
Y29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Ci0gICAgX2NvbnRyb2xs
ZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwotfQotCi0tIChp
ZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+KW5ldHdvcmsxSGFuZGxlcgotewot
ICAgIHJldHVybiBfbmV0d29yazFIYW5kbGVyOwotfQotCi0tICh2b2lkKXNldE5ldHdvcmszSGFu
ZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0g
ICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmszSGFuZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgW19uZXR3b3JrM0hhbmRsZXIgcmVsZWFzZV07Ci0gICAgX25ldHdvcmszSGFuZGxlciA9IFto
YW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBzdGQ6Om1h
a2VfdW5pcXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVy
KTsKLSAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBbHRlcm5hdGVE
aXNwYXRjaGFibGVBZ2VudDxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyLCBBbHRlcm5hdGVOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyPj4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrMyIpLCAqX2NvbnRy
b2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwotICAgIF9jb250cm9sbGVyLT5h
cHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKLX0KLQotLSAoaWQ8VGVz
dFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiluZXR3b3JrM0hhbmRsZXIKLXsKLSAgICBy
ZXR1cm4gX25ldHdvcmszSGFuZGxlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
cy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wu
aD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNl
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQHByb3BlcnR5IChub25hdG9t
aWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmsxSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5l
dHdvcmsxRG9tYWluSGFuZGxlcj4gbmV0d29yazFIYW5kbGVyOwotQHByb3BlcnR5IChub25hdG9t
aWMsIHJldGFpbiwgc2V0dGVyPXNldE5ldHdvcmszSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbE5l
dHdvcmszRG9tYWluSGFuZGxlcj4gbmV0d29yazNIYW5kbGVyOwotQGVuZAotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbEludGVybmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLW5h
bWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlkIGVycm9y
Q2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3Vy
Y2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrXTsKLX0KLQotCi0KLQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZCBlcnJv
ckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291
cmNlMVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFja107Ci19Ci0KLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI6OmxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWQgZXJyb3JDYWxs
YmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKSk7Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTJX
aXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2Fs
bGJhY2tdOwotfQotCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
Ojpsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkKQotewotICAgIGlkIGVycm9yQ2FsbGJhY2sg
PSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBlcnJvcik7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7Ci0gICAgfTsKLQotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCkpOwotICAgIH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UzV2l0aEVy
cm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
XTsKLX0KLQotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCkKLXsKLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihO
U1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJy
b3IpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwot
ICAgIH07Ci0KLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlNFdpdGhFcnJvckNh
bGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19
Ci0KLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZTUobG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJp
bmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9
OwotCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7
Ci0gICAgfTsKLQotICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTVXaXRoRXJyb3JDYWxsYmFj
azplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwotfQotCi12
b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2
KGxvbmcgcmVxdWVzdElkKQotewotICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICpl
cnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9y
KHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7Ci0gICAgfTsKLQot
ICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwotICAg
IH07Ci0KLSAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6ZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKLX0KLQotdm9pZCBP
YmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25n
IHJlcXVlc3RJZCkKLXsKLSAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3Ip
IHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwotICAgIH07Ci0KLSAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Owot
Ci0gICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlN1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJz
Lm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlp
bmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotCi0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50
RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLQotCi0KLQotQHByb3RvY29sIFRlc3RQ
cm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+Ci1AcmVxdWlyZWQKLS0gKHZv
aWQpbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJv
cikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoKSlzdWNjZXNzQ2FsbGJh
Y2s7Ci1AZW5kCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXIg
PE5TT2JqZWN0PgotQHJlcXVpcmVkCi0tICh2b2lkKWxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxs
YmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOih2b2lkKF4pKCkpc3VjY2Vzc0NhbGxiYWNrOwotLSAodm9pZClsb2FkUmVzb3VyY2UyV2l0
aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazoodm9pZCheKSgpKXN1Y2Nlc3NDYWxsYmFjazsKLS0gKHZvaWQpbG9hZFJl
c291cmNlM1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoKSlzdWNjZXNzQ2FsbGJhY2s7Ci0tICh2
b2lkKWxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJy
b3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKCkpc3VjY2Vzc0NhbGxi
YWNrOwotLSAodm9pZClsb2FkUmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNT
dHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSgpKXN1
Y2Nlc3NDYWxsYmFjazsKLS0gKHZvaWQpbG9hZFJlc291cmNlNldpdGhFcnJvckNhbGxiYWNrOih2
b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZv
aWQoXikoKSlzdWNjZXNzQ2FsbGJhY2s7Ci0tICh2b2lkKWxvYWRSZXNvdXJjZTdXaXRoRXJyb3JD
YWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOih2b2lkKF4pKCkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi0KLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi0KLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXpl
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNl
ci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsxRG9tYWluKQotCi1AZW5kCi1AaW50ZXJmYWNlIFRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazJEb21haW4pCi0KLSsgKHZvaWQpX3Bh
cnNlTG9hZGVySWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OwotCi1AZW5kCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29y
azNEb21haW4pCi0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoTmV0d29yazFEb21haW4pCi0KLUBlbmQKLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsyRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZUxv
YWRlcklkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNz
XSk7Ci0gICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5bG9hZDsKLX0KLQotQGVuZAotQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29yazNEb21haW4p
Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
Y29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JWYWx1ZXMuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVz
Lmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTA1NTNjODBlYTc3
M2NiNTZjNWU1ZmM5OTJhMjY4Mzg1NWM1NTNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBA
IC0xLDEyNzMgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5k
cy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gVHlwZURvbWFp
bi4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUeXBlRG9tYWluLlR5cGVEb21haW5F
bnVtIiwge1NoYXJlZDogInNoYXJlZCIsIFJlZDogInJlZCIsIEdyZWVuOiAiZ3JlZW4iLCBCbHVl
OiAiYmx1ZSJ9KTsKLQotLy8gQ29tbWFuZERvbWFpbi4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJDb21tYW5kRG9tYWluLmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlIiwgW10s
IFsicmV0dXJuVmFsdWUiXSk7Ci1JbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJDb21t
YW5kRG9tYWluIik7Ci0KLS8vIEV2ZW50RG9tYWluLgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckV2ZW50RG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5E
aXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkV2ZW50RG9tYWluIik7Ci1JbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRXZlbnREb21haW4uRXZlbnRXaXRoRW51bVBhcmFtZXRl
clBhcmFtZXRlciIsIHtTaGFyZWQ6ICJzaGFyZWQiLCBCbGFjazogImJsYWNrIiwgV2hpdGU6ICJ3
aGl0ZSJ9KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRXZlbnREb21haW4uZXZl
bnRXaXRoRW51bVBhcmFtZXRlciIsIFsicGFyYW1ldGVyIl0pOwotSW5zcGVjdG9yQmFja2VuZC5h
Y3RpdmF0ZURvbWFpbigiRXZlbnREb21haW4iKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFj
a2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVl
cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFn
bWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0K
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRCYWNrZW5k
RGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYgZGlzcGF0Y2hlcikgeyBtX2Jh
Y2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsgfQotICAgIEJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3Bh
dGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiBt
X2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi1jbGFzcyBBbHRlcm5hdGVDb21tYW5kRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewot
cHVibGljOgotICAgIHZpcnR1YWwgfkFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShs
b25nIGNhbGxJZCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmls
ZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgot
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLWNsYXNzIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjsKLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
LQotY2xhc3MgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6
Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdyZXR1cm5WYWx1ZScgd2hpbGUgZ2VuZXJh
dGluZyBjb21tYW5kL2V2ZW50IGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlLgotICAgIGVudW0g
Y2xhc3MgUmV0dXJuVmFsdWUgewotICAgICAgICBTaGFyZWQgPSAwLAotICAgICAgICBDeWFuID0g
NiwKLSAgICAgICAgTWFnZW50YSA9IDcsCi0gICAgICAgIFllbGxvdyA9IDgsCi0gICAgfTsgLy8g
ZW51bSBjbGFzcyBSZXR1cm5WYWx1ZQotICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kV2l0aEVudW1S
ZXR1cm5WYWx1ZShFcnJvclN0cmluZyYsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OlJldHVyblZhbHVlKiBvdXRfcmV0dXJuVmFsdWUpID0gMDsKLXByb3RlY3RlZDoKLSAg
ICB2aXJ0dWFsIH5Db21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Ci19Owot
Ci1jbGFzcyBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3Vw
cGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmpl
Y3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7Ci1wcml2YXRlOgotICAgIHZvaWQgY29tbWFuZFdpdGhF
bnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYg
cGFyYW1ldGVycyk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
Ci1wdWJsaWM6Ci0gICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZUNvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVy
bmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Ci1wcml2YXRlOgotICAgIEFs
dGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5hdGVEaXNwYXRj
aGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIENvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIENvbW1hbmREb21haW5CYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqKTsKLSAgICBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi1Db21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+Q29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQotCi1SZWY8Q29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPiBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0
ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIENvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQp
KTsKLX0KLQotQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLSAgICA6IFN1cHBsZW1l
bnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChh
Z2VudCkKLXsKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JE
b21haW4oQVNDSUlMaXRlcmFsKCJDb21tYW5kRG9tYWluIiksIHRoaXMpOwotfQotCi12b2lkIENv
bW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCi17Ci0g
ICAgUmVmPENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7Ci0K
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdl
dE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsKLQotICAgIGlmICht
ZXRob2QgPT0gImNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlIikKLSAgICAgICAgY29tbWFuZFdp
dGhFbnVtUmV0dXJuVmFsdWUocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKLSAgICBl
bHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcJycsICJDb21tYW5k
RG9tYWluIiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7Ci19Ci0KLXZvaWQgQ29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikKLXsKLSNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICBpZiAobV9hbHRlcm5hdGVEaXNw
YXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Y29tbWFuZFdpdGhFbnVt
UmV0dXJuVmFsdWUocmVxdWVzdElkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgot
Ci0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBDb21tYW5kRG9tYWluQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjpSZXR1cm5WYWx1ZSBvdXRfcmV0dXJuVmFsdWU7Ci0gICAgbV9hZ2Vu
dC0+Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUoZXJyb3IsICZvdXRfcmV0dXJuVmFsdWUpOwot
Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJyZXR1cm5WYWx1ZSIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVy
czo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3JldHVyblZhbHVlKSk7Ci0KLSAgICBpZiAoIWVy
cm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0K
LSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZy
b250ZW5kUm91dGVyOwotCi1jbGFzcyBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7Ci1w
dWJsaWM6Ci0gICAgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXIm
IGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQot
ICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3BhcmFtZXRlcicgd2hpbGUgZ2VuZXJh
dGluZyBjb21tYW5kL2V2ZW50IGV2ZW50V2l0aEVudW1QYXJhbWV0ZXIuCi0gICAgICAgIGVudW0g
Y2xhc3MgUGFyYW1ldGVyIHsKLSAgICAgICAgICAgIFNoYXJlZCA9IDAsCi0gICAgICAgICAgICBC
bGFjayA9IDQsCi0gICAgICAgICAgICBXaGl0ZSA9IDUsCi0gICAgICAgIH07IC8vIGVudW0gY2xh
c3MgUGFyYW1ldGVyCi0gICAgdm9pZCBldmVudFdpdGhFbnVtUGFyYW1ldGVyKFBhcmFtZXRlciBw
YXJhbWV0ZXIpOwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRl
cjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5q
c29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0jaW5j
bHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi12b2lkIEV2ZW50RG9tYWluRnJvbnRl
bmREaXNwYXRjaGVyOjpldmVudFdpdGhFbnVtUGFyYW1ldGVyKFBhcmFtZXRlciBwYXJhbWV0ZXIp
Ci17Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJt
ZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVy
IikpOwotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJwYXJhbWV0ZXIiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1D
b25zdGFudFZhbHVlKHBhcmFtZXRlcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJwYXJhbXMiKSwgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKLQotICAgIG1fZnJv
bnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi1uYW1lc3BhY2Ug
UHJvdG9jb2wgewotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5hbWVzcGFjZSBUeXBlRG9t
YWluIHsKLWVudW0gY2xhc3MgVHlwZURvbWFpbkVudW07Ci19IC8vIFR5cGVEb21haW4KLS8vIEVu
ZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KLQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJz
IHsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQotewot
ICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1
ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi1uYW1lc3BhY2UgVHlwZURv
bWFpbiB7Ci0vKiAgKi8KLWVudW0gY2xhc3MgVHlwZURvbWFpbkVudW0gewotICAgIFNoYXJlZCA9
IDAsCi0gICAgUmVkID0gMSwKLSAgICBHcmVlbiA9IDIsCi0gICAgQmx1ZSA9IDMsCi19OyAvLyBl
bnVtIGNsYXNzIFR5cGVEb21haW5FbnVtCi19IC8vIFR5cGVEb21haW4KLQotCi0KLW5hbWVzcGFj
ZSBUZXN0SGVscGVycyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+Ci1z
dGQ6Om9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhj
b25zdCBTdHJpbmcmKTsKLQotLy8gRW51bXMgaW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4KLXRl
bXBsYXRlPD4KLXN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6
VHlwZURvbWFpbkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4oY29uc3QgU3RyaW5nJik7Ci0KLX0gLy8g
bmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFt
ZXNwYWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Ci0gICAgInNoYXJlZCIs
Ci0gICAgInJlZCIsCi0gICAgImdyZWVuIiwKLSAgICAiYmx1ZSIsCi0gICAgImJsYWNrIiwKLSAg
ICAid2hpdGUiLAotICAgICJjeWFuIiwKLSAgICAibWFnZW50YSIsCi0gICAgInllbGxvdyIsCi19
OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKLSAgICByZXR1cm4g
ZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Ci19Ci0KLS8vIEVudW1zIGluIHRoZSAnVHlwZURv
bWFpbicgRG9tYWluCi10ZW1wbGF0ZTw+Ci1zdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+KGNvbnN0IFN0
cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFu
dFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVE
b21haW46OlR5cGVEb21haW5FbnVtOjpTaGFyZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OlJlZCwKLSAgICAgICAgKHNp
emVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6R3Jl
ZW4sCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlw
ZURvbWFpbkVudW06OkJsdWUsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7
ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVz
W2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90
b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0pY29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJz
Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
Ci0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcjsKLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi0KLWNsYXNzIE9iakNJbnNwZWN0b3JDb21tYW5k
RG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBPYmpDSW5zcGVjdG9yQ29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21h
aW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdmlydHVh
bCB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkKSBvdmVycmlk
ZTsKLXByaXZhdGU6Ci0gICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5E
b21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKLX07Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAot
Ci0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+Ci0jaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVy
cy5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJz
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uCi17Ci0gICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiBfY29udHJvbGxlcjsKLSAgICBpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWlu
SGFuZGxlcj4gX2NvbW1hbmREb21haW5IYW5kbGVyOwotICAgIFRlc3RQcm90b2NvbEV2ZW50RG9t
YWluRG9tYWluRXZlbnREaXNwYXRjaGVyICpfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXI7Ci19
Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0g
ICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVy
KTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0K
LS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfY29tbWFuZERvbWFpbkhhbmRsZXIgcmVsZWFzZV07
Ci0gICAgW19ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAgICBbc3VwZXIg
ZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0Q29tbWFuZERvbWFpbkhhbmRsZXI6KGlkPFRlc3RQ
cm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiloYW5kbGVyCi17Ci0gICAgaWYgKGhh
bmRsZXIgPT0gX2NvbW1hbmREb21haW5IYW5kbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBb
X2NvbW1hbmREb21haW5IYW5kbGVyIHJlbGVhc2VdOwotICAgIF9jb21tYW5kRG9tYWluSGFuZGxl
ciA9IFtoYW5kbGVyIHJldGFpbl07Ci0KLSAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNoZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI+KGhhbmRsZXIpOwotICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBzdGQ6Om1ha2VfdW5pcXVl
PEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciwgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPj4oQVNDSUlMaXRlcmFs
KCJDb21tYW5kRG9tYWluIiksICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRj
aGVyKSk7Ci0gICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5h
dGVBZ2VudCkpOwotfQotCi0tIChpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFu
ZGxlcj4pY29tbWFuZERvbWFpbkhhbmRsZXIKLXsKLSAgICByZXR1cm4gX2NvbW1hbmREb21haW5I
YW5kbGVyOwotfQotCi0tIChUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0
Y2hlciAqKWV2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyCi17Ci0gICAgaWYgKCFfZXZlbnREb21h
aW5FdmVudERpc3BhdGNoZXIpCi0gICAgICAgIF9ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlciA9
IFtbVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGlu
aXRXaXRoQ29udHJvbGxlcjpfY29udHJvbGxlcl07Ci0gICAgcmV0dXJuIF9ldmVudERvbWFpbkV2
ZW50RGlzcGF0Y2hlcjsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkg
KCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNP
YmplY3QKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXRDb21tYW5kRG9t
YWluSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiBj
b21tYW5kRG9tYWluSGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVGVz
dFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKmV2ZW50RG9tYWluRXZl
bnREaXNwYXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNv
bmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVl
cy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLXZvaWQgT2JqQ0luc3BlY3RvckNv
bW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUo
bG9uZyByZXF1ZXN0SWQpCi17Ci0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0g
ICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFu
ZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSkgewotICAgICAgICBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInJldHVy
blZhbHVlIiksIHRvUHJvdG9jb2xTdHJpbmcocmV0dXJuVmFsdWUpKTsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmpl
Y3QpKTsKLSAgICB9OwotCi0gICAgW21fZGVsZWdhdGUgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFs
dWVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOwotfQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
RXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIKLXsKLSAgICBBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7
Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAgIF9jb250cm9sbGVyID0gY29u
dHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClldmVudFdpdGhFbnVtUGFy
YW1ldGVyV2l0aFBhcmFtZXRlcjooVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVt
UGFyYW1ldGVyUGFyYW1ldGVyKXBhcmFtZXRlcgotewotICAgIGNvbnN0IEZyb250ZW5kUm91dGVy
JiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0
ZXJhbCgiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciIpKTsKLSAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicGFyYW1ldGVyIiksIHRv
UHJvdG9jb2xTdHJpbmcocGFyYW1ldGVyKSk7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChB
U0NJSUxpdGVyYWwoInBhcmFtcyIpLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwotICAgIHJvdXRl
ci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotQGVuZAotCi0K
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBlbnVtLXZhbHVlcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLQotdHlwZWRlZiBOU19F
TlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0pIHsKLSAgICBUZXN0UHJv
dG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZCwKLSAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51
bVJlZCwKLSAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUdyZWVuLAotICAgIFRlc3RQcm90
b2NvbFR5cGVEb21haW5FbnVtQmx1ZSwKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVy
blZhbHVlKSB7Ci0gICAgVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJl
dHVyblZhbHVlUmV0dXJuVmFsdWVTaGFyZWQsCi0gICAgVGVzdFByb3RvY29sQ29tbWFuZERvbWFp
bkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWVDeWFuLAotICAgIFRlc3RQcm90
b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlTWFn
ZW50YSwKLSAgICBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJu
VmFsdWVSZXR1cm5WYWx1ZVllbGxvdywKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlcikg
ewotICAgIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFt
ZXRlclNoYXJlZCwKLSAgICBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJh
bWV0ZXJQYXJhbWV0ZXJCbGFjaywKLSAgICBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0
aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXJXaGl0ZSwKLX07Ci0KLQotCi1AcHJvdG9jb2wgVGVzdFBy
b3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQHJlcXVpcmVkCi0t
ICh2b2lkKWNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQo
XikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZChe
KShUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1
cm5WYWx1ZSByZXR1cm5WYWx1ZSkpc3VjY2Vzc0NhbGxiYWNrOwotQGVuZAotCi1fX2F0dHJpYnV0
ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRXZl
bnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClldmVudFdp
dGhFbnVtUGFyYW1ldGVyV2l0aFBhcmFtZXRlcjooVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVu
dFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyKXBhcmFtZXRlcjsKLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNv
bgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgi
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIu
aD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi1AaW50ZXJm
YWNlIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRl
KQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVu
dW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0
cmluZyhUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFs
dWUpIHsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkOgotICAgICAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsKCJzaGFyZWQiKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFR5
cGVEb21haW5FbnVtUmVkOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJyZWQiKTsKLSAg
ICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW46Ci0gICAgICAgIHJldHVybiBB
U0NJSUxpdGVyYWwoImdyZWVuIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51
bUJsdWU6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImJsdWUiKTsKLSAgICB9Ci19Ci0K
LXRlbXBsYXRlPD4KLWlubGluZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSBmcm9tUHJvdG9j
b2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gInNoYXJl
ZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZDsKLSAg
ICBpZiAodmFsdWUgPT0gInJlZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9t
YWluRW51bVJlZDsKLSAgICBpZiAodmFsdWUgPT0gImdyZWVuIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW47Ci0gICAgaWYgKHZhbHVlID09ICJibHVlIikK
LSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1ZTsKLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1T
aGFyZWQ7Ci19Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2Nv
bENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlIHZhbHVl
KQotewotICAgIHN3aXRjaCh2YWx1ZSkgewotICAgIGNhc2UgVGVzdFByb3RvY29sQ29tbWFuZERv
bWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWVTaGFyZWQ6Ci0gICAgICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoInNoYXJlZCIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sQ29t
bWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWVDeWFuOgotICAg
ICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJjeWFuIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xD
b21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZU1hZ2VudGE6
Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIm1hZ2VudGEiKTsKLSAgICBjYXNlIFRlc3RQ
cm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVl
WWVsbG93OgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ5ZWxsb3ciKTsKLSAgICB9Ci19
Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdp
dGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gInNoYXJlZCIpCi0gICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1
cm5WYWx1ZVNoYXJlZDsKLSAgICBpZiAodmFsdWUgPT0gImN5YW4iKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJu
VmFsdWVDeWFuOwotICAgIGlmICh2YWx1ZSA9PSAibWFnZW50YSIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5W
YWx1ZU1hZ2VudGE7Ci0gICAgaWYgKHZhbHVlID09ICJ5ZWxsb3ciKQotICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJu
VmFsdWVZZWxsb3c7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFRlc3RQ
cm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVl
U2hhcmVkOwotfQotCi0KLWlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9j
b2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIgdmFsdWUpCi17Ci0g
ICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50
V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXJTaGFyZWQ6Ci0gICAgICAgIHJldHVybiBBU0NJSUxp
dGVyYWwoInNoYXJlZCIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdp
dGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyQmxhY2s6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVy
YWwoImJsYWNrIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVu
dW1QYXJhbWV0ZXJQYXJhbWV0ZXJXaGl0ZToKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
d2hpdGUiKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBUZXN0UHJvdG9jb2xFdmVu
dERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIgZnJvbVByb3RvY29sU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJzaGFyZWQiKQotICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVy
UGFyYW1ldGVyU2hhcmVkOwotICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVy
QmxhY2s7Ci0gICAgaWYgKHZhbHVlID09ICJ3aGl0ZSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXJXaGl0ZTsKLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gVGVzdFByb3RvY29sRXZlbnREb21h
aW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyU2hhcmVkOwotfQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChUeXBlRG9tYWluRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVR5cGVEb21haW5FbnVtOihO
U051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKENvbW1hbmREb21haW5Eb21haW4p
Ci0KLUBlbmQKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChFdmVudERv
bWFpbkRvbWFpbikKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zIChUeXBlRG9tYWluRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZVR5cGVEb21haW5F
bnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7
Ci0gICAgKm91dFZhbHVlID0gQChJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJv
dG9jb2xUeXBlRG9tYWluRW51bT4ocGF5bG9hZCkpOwotfQotCi1AZW5kCi1AaW1wbGVtZW50YXRp
b24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChDb21tYW5kRG9tYWluRG9tYWluKQotCi1A
ZW5kCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChFdmVudERv
bWFpbkRvbWFpbikKLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMu
aD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7Ci0KLQotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZl
bnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYzMxZDY4NGNlMzIwYmY3NTRlNmE2YWM3Mzc3ZTE3YWMxN2Q1Y2NmNC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgt
b3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xLDExODMg
KzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFt
ZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0v
LyBEYXRhYmFzZS4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEYXRhYmFzZURpc3BhdGNoZXIg
PSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKEluc3BlY3Rv
ckJhY2tlbmQsICJEYXRhYmFzZSIpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJE
YXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwgWyJjb2x1bW5OYW1lcyIsICJu
b3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAic3FsRXJyb3IiLCAic2Ny
ZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7Ci1JbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVycyIsIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJw
YXlsb2FkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIsICJw
cmludENvbG9yIl0pOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2Ui
KTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRj
aGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERp
c3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIq
IGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5n
ZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2Vu
ZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBG
aWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0
ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQot
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBh
cmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRl
cjsKLQotY2xhc3MgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIERh
dGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikg
OiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICB2b2lkIGRpZEV4ZWN1
dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0IG5vdGVzLCBjb25zdCBkb3Vi
bGUqIGNvbnN0IHRpbWVzdGFtcCwgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZXMsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIGNvbnN0IHNjcmVlbkNv
bG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0
ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGNvbnN0IHByaW50Q29sb3IpOwotICAgIHZvaWQg
ZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91Ymxl
IHRpbWVzdGFtcCwgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBj
b25zdCBTdHJpbmcmIHByaW50Q29sb3IpOwotcHJpdmF0ZToKLSAgICBGcm9udGVuZFJvdXRlciYg
bV9mcm9udGVuZFJvdXRlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVu
ZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLXZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVP
cHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmlu
Zz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0IG5vdGVzLCBjb25zdCBkb3VibGUq
IGNvbnN0IHRpbWVzdGFtcCwgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZXMsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIGNvbnN0IHNjcmVlbkNvbG9y
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJu
YXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGNvbnN0IHByaW50Q29sb3IpCi17Ci0gICAgUmVmPElu
c3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlM
aXRlcmFsKCJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIikpOwotICAgIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5
KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOwotICAgIGlmIChub3Rl
cykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIp
LCAqbm90ZXMpOwotICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0
RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksICp0aW1lc3RhbXApOwotICAgIGlmICh2
YWx1ZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFs
dWVzIiksIHZhbHVlcyk7Ci0gICAgaWYgKHBheWxvYWQpCi0gICAgICAgIHBhcmFtc09iamVjdC0+
c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksICpwYXlsb2FkKTsKLSAgICBpZiAoc3Fs
RXJyb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3Fs
RXJyb3IiKSwgc3FsRXJyb3IpOwotICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgcGFyYW1z
T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCAqc2NyZWVuQ29s
b3IpOwotICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0
QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgYWx0ZXJuYXRlQ29sb3JzKTsK
LSAgICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJwcmludENvbG9yIiksICpwcmludENvbG9yKTsKLSAgICBqc29uTWVzc2FnZS0+
c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7
Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOwotfQotCi12b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1w
LCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycyYgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmlu
ZyYgcHJpbnRDb2xvcikKLXsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIkRhdGFiYXNlLmRpZEV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVycyIpKTsKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNP
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtc09iamVjdC0+c2V0
QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBjb2x1bW5OYW1lcyk7Ci0gICAgcGFy
YW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7Ci0gICAg
cGFyYW1zT2JqZWN0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdGltZXN0
YW1wKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIp
LCB2YWx1ZXMpOwotICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXls
b2FkIiksIHBheWxvYWQpOwotICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgic3FsRXJyb3IiKSwgc3FsRXJyb3IpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFT
Q0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgc2NyZWVuQ29sb3IpOwotICAgIHBhcmFtc09iamVj
dC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgYWx0ZXJuYXRlQ29s
b3JzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29s
b3IiKSwgcHJpbnRDb2xvcik7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVy
YWwoInBhcmFtcyIpLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwotCi0gICAgbV9mcm9udGVuZFJv
dXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgot
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0K
LQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1l
c3BhY2UgRGF0YWJhc2UgewotY2xhc3MgRXJyb3I7Ci19IC8vIERhdGFiYXNlCi0vLyBFbmQgb2Yg
Zm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1lc3BhY2UgRGF0YWJh
c2UgewotLyogVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiAqLwotdHlwZWRl
ZiBTdHJpbmcgRGF0YWJhc2VJZDsKLXR5cGVkZWYgU3RyaW5nIFByaW1hcnlDb2xvcnM7Ci10eXBl
ZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzPiBDb2xvckxpc3Q7Ci19IC8vIERhdGFiYXNlCi0vLyBFbmQgb2Yg
dHlwZWRlZnMuCi0KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci0vKiBEYXRhYmFzZSBlcnJvci4gKi8K
LWNsYXNzIEVycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7Ci1w
dWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgTWVz
c2FnZVNldCA9IDEgPDwgMCwKLSAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKLSAgICAgICAgQWxs
RmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0
ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+
KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypFcnJvciovSW5zcGVj
dG9yT2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmpl
Y3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQot
ICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNl
dCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwgdmFsdWUpOwotICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVp
bGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2Rl
X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0
ZXJhbCgiY29kZSIpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVT
ZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8RXJyb3I+IHJlbGVhc2UoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVy
cm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAg
ICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVs
bCgpOwotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVy
cm9yPio+KCZyZXN1bHQpKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpj
cmVhdGUoKQotICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCi0gICAgICogICAgIC5zZXRDb2Rl
KC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMgQnVpbGRl
cjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5v
RmllbGRzU2V0PihJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci19OwotCi19IC8v
IERhdGFiYXNlCi0KLQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3Rv
Y29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRo
LW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZp
Zy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVB
Z2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VE
b21haW5FdmVudERpc3BhdGNoZXIgKl9kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcjsKLX0KLQotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyKiljb250cm9sbGVyCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAo
IXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgQVNTRVJUKGNvbnRyb2xsZXIpOwotICAg
IF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9p
ZClkZWFsbG9jCi17Ci0gICAgW19kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlciByZWxlYXNlXTsKLSAg
ICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZl
bnREaXNwYXRjaGVyICopZGF0YWJhc2VFdmVudERpc3BhdGNoZXIKLXsKLSAgICBpZiAoIV9kYXRh
YmFzZUV2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX2RhdGFiYXNlRXZlbnREaXNwYXRjaGVyID0g
W1tUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdp
dGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4gX2RhdGFiYXNlRXZlbnREaXNw
YXRjaGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1w
YXJhbWV0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9f
KCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbiA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQ
cm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyICpkYXRhYmFzZUV2ZW50RGlzcGF0
Y2hlcjsKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFy
YW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVy
cy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlv
bmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7Ci0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50
RGlzcGF0Y2hlcgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRy
b2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsKLXsKLSAgICBzZWxmID0gW3N1cGVy
IGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQo
Y29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tICh2b2lkKWRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1u
TmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJp
bmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3VibGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90
b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KilwYXlsb2FkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9y
IHNjcmVlbkNvbG9yOihOU1N0cmluZyAqKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJp
bmcgKiopcHJpbnRDb2xvcgotewotICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBf
Y29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3Rl
cyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1
ZXMsIEAidmFsdWVzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzY3JlZW5Db2xvciwgQCJzY3JlZW5D
b2xvciIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihh
bHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIpOwot
Ci0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRo
b2QiKSwgQVNDSUlMaXRlcmFsKCJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJz
IikpOwotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICBwYXJhbXNPYmpl
Y3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgaW5zcGVjdG9yU3RyaW5n
QXJyYXkoKCpjb2x1bW5OYW1lcykpKTsKLSAgICBpZiAobm90ZXMpCi0gICAgICAgIHBhcmFtc09i
amVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgKCpub3RlcykpOwotICAgIGlm
ICh0aW1lc3RhbXApCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJh
bCgidGltZXN0YW1wIiksICgqdGltZXN0YW1wKSk7Ci0gICAgaWYgKHZhbHVlcykKLSAgICAgICAg
cGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgWygqdmFsdWVz
KSB0b0luc3BlY3Rvck9iamVjdF0pOwotICAgIGlmIChwYXlsb2FkKQotICAgICAgICBwYXJhbXNP
YmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBbKCpwYXlsb2FkKSB0b0lu
c3BlY3Rvck9iamVjdF0pOwotICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0
LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBbKCpzcWxFcnJvcikgdG9JbnNw
ZWN0b3JPYmplY3RdKTsKLSAgICBpZiAoc2NyZWVuQ29sb3IpCi0gICAgICAgIHBhcmFtc09iamVj
dC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgKCpzY3JlZW5Db2xvcikp
OwotICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJy
YXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXko
KCphbHRlcm5hdGVDb2xvcnMpKSk7Ci0gICAgaWYgKHByaW50Q29sb3IpCi0gICAgICAgIHBhcmFt
c09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCAoKnByaW50Q29s
b3IpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiks
IFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi0tICh2b2lkKWRpZEV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1dpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFt
ZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZh
bHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKXBheWxvYWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
KilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJpbmcgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVD
b2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9y
OihOU1N0cmluZyAqKXByaW50Q29sb3IKLXsKLSAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91
dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7Ci0KLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVz
Iik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBA
InZhbHVlcyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBh
eWxvYWQsIEAicGF5bG9hZCIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFS
QU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QQVJBTUVURVIoc2NyZWVuQ29sb3IsIEAic2NyZWVuQ29sb3IiKTsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0
ZXJuYXRlQ29sb3JzIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIocHJpbnRDb2xvciwgQCJwcmludENvbG9yIik7Ci0KLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0
PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3Nh
Z2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIkRhdGFi
YXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpKTsKLSAgICBSZWY8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBh
cmFtc09iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBpbnNwZWN0
b3JTdHJpbmdBcnJheShjb2x1bW5OYW1lcykpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbm90ZXMpOwotICAgIHBhcmFtc09iamVjdC0+c2V0RG91
YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHRpbWVzdGFtcCk7Ci0gICAgcGFyYW1zT2Jq
ZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgW3ZhbHVlcyB0b0luc3BlY3Rv
ck9iamVjdF0pOwotICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXls
b2FkIiksIFtwYXlsb2FkIHRvSW5zcGVjdG9yT2JqZWN0XSk7Ci0gICAgcGFyYW1zT2JqZWN0LT5z
ZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBbc3FsRXJyb3IgdG9JbnNwZWN0b3JP
YmplY3RdKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVl
bkNvbG9yIiksIHNjcmVlbkNvbG9yKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KEFTQ0lJ
TGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KGFsdGVybmF0
ZUNvbG9ycykpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJp
bnRDb2xvciIpLCBwcmludENvbG9yKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJ
TGl0ZXJhbCgicGFyYW1zIiksIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0gICAgcm91dGVyLnNl
bmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotCi1AZW5kCi0KLQotIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2
ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
LQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBj
bGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOwotCi0KLQotCi1fX2F0dHJpYnV0ZV9fKCh2
aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5
bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2Jq
ZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdl
IGNvZGU6KGludCljb2RlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNv
cHkpIE5TU3RyaW5nICptZXNzYWdlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIGFzc2lnbikgaW50IGNvZGU7Ci1AZW5kCi0KLQotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmls
aXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5F
dmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClkaWRFeGVjdXRlT3B0aW9uYWxQYXJh
bWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29sdW1uTmFt
ZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlICopdGltZXN0YW1w
IHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90
b2NvbEpTT05PYmplY3QgKiopcGF5bG9hZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJpbmcgKiopc2NyZWVuQ29sb3IgYWx0
ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHBy
aW50Q29sb3I6KE5TU3RyaW5nICoqKXByaW50Q29sb3I7Ci0tICh2b2lkKWRpZEV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICop
Y29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGlt
ZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJpbmcgKilzY3JlZW5Db2xvciBh
bHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBw
cmludENvbG9yOihOU1N0cmluZyAqKXByaW50Q29sb3I7Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFs
LXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVl
cy5oPgotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRj
aGVyIChQcml2YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVj
dG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wu
aCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlw
ZT4KLU9iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7
Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRz
LXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9y
dCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVBy
b3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
LQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWlu
KQotCi0rICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU1N0cmlu
ZyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlQ29s
b3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQotCi0r
ICh2b2lkKV9wYXJzZURhdGFiYXNlSWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2Fk
LCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilwYXlsb2Fk
OwotfQotCi0rICh2b2lkKV9wYXJzZVByaW1hcnlDb2xvcnM6KE5TU3RyaW5nICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNTdHJp
bmcgKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5T
U3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiov
IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxv
YWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0
VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9h
ZDpwYXlsb2FkXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBh
cmFtZXRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvcgotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25u
dWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVz
c2FnZSIpOwotICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07Ci0KLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAi
Y29kZSIpOwotICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07
Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmpl
Y3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3QKLXsKLSAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltqc29uT2JqZWN0IHRvSW5zcGVjdG9y
T2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2Fn
ZSBjb2RlOihpbnQpY29kZQotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShtZXNzYWdlLCBAIm1lc3NhZ2UiKTsKLQotICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7
Ci0gICAgc2VsZi5jb2RlID0gY29kZTsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lk
KXNldE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtzdXBlciBzZXRTdHJpbmc6
bWVzc2FnZSBmb3JLZXk6QCJtZXNzYWdlIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopbWVzc2FnZQot
ewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tICh2
b2lkKXNldENvZGU6KGludCljb2RlCi17Ci0gICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JL
ZXk6QCJjb2RlIl07Ci19Ci0KLS0gKGludCljb2RlCi17Ci0gICAgcmV0dXJuIFtzdXBlciBpbnRl
Z2VyRm9yS2V5OkAiY29kZSJdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWF2YWlsYWJpbGl0eS5qc29u
LWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2ZhaWwtb24tZG9tYWluLWF2YWlsYWJpbGl0eS5qc29uLWVycm9yCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA5MGQ3MTk1ZDZhZDM2YTBkNmJmN2E3YWJjNzQxNzZjMGYyODYw
ZmNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LWRvbWFpbi1hdmFpbGFiaWxpdHkuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAg
QEAKLUVSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGF2YWlsYWJpbGl0eSBp
cyBhbiB1bnN1cHBvcnRlZCBzdHJpbmcuIFdhczogIndlYmIiLCBBbGxvd2VkIHZhbHVlczogd2Vi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRlci1uYW1l
cy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFt
ZXMuanNvbi1lcnJvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y3NTZkZTMyNTA1
MGMzM2E0OTJjZDUwZDllYWRmNDIzMDM1YjYxMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1jYWxsLXBhcmFtZXRl
ci1uYW1lcy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1h
bGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogY2FsbCBwYXJhbWV0ZXIgbGlzdCBmb3IgY29t
bWFuZCBwcm9jZXNzUG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24t
ZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpz
b24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMTQ4ZmY2N2M5NjA5NDg4
YTgwZTZmYTI1ZDNiZmE3NzhmNWRhMGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1u
YW1lcy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZv
cm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogcmV0dXJuIHBhcmFtZXRlciBsaXN0IGZvciBjb21t
YW5kIHByb2Nlc3NQb2ludHMgaGFzIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvciBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJvcgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYzcxYmJkMjFjMmNmMGMzYjAzODAxZDk2MzdhNGU2ZDBmYzI1
YWM0NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKKysrIC9kZXYvbnVs
bApAQCAtMSArMCwwIEBACi1FUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiBw
YXJhbWV0ZXIgbGlzdCBmb3IgZXZlbnQgcHJvY2Vzc2VkUG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFy
YW1ldGVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlv
bnMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVy
cm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDdjZGY4ZTI4ZTg1NjYxMGEyNmY4
MTU0OTQzZjM2Y2Y4YjdkMWY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yCisr
KyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IER1cGxpY2F0ZSB0eXBlIGRlY2xhcmF0
aW9uOiBSdW50aW1lLlJlbW90ZU9iamVjdElkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUt
dHlwZS1tZW1iZXItbmFtZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJl
ci1uYW1lcy5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTM3NmE3
N2E0NTVmZDE1ZjY3ZDhiY2I5MzVhNmJhNDM4YzBhNTRjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1uYW1l
cy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IE1hbGZvcm1l
ZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdHlwZSBkZWNsYXJhdGlvbiBmb3IgUG9pbnQgaGFzIGR1
cGxpY2F0ZSBtZW1iZXIgbmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1
ZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1lcnJvcgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY1NWMyYjkwN2UwMmUzZTg0Y2IzZjY2ZmExZjU4
ZTEzZDliN2I1My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAt
MSArMCwwIEBACi1FUlJPUjogVHlwZSByZWZlcmVuY2Ugd2l0aCBlbnVtIHZhbHVlcyBtdXN0IGhh
dmUgYXQgbGVhc3Qgb25lIGVudW0gdmFsdWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlw
ZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBl
ZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA5N2IyYWYwZTQ3ZTkzZjgwNDk3OTQ0NDcyNTdkZjMyNzIzZjA2ODI0Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10
eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAg
LTEgKzAsMCBAQAotRVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgcGFyYW1ldGVyIG11
c3QgYmUgYSBib29sZWFuIGxpdGVyYWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQt
b3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRp
b25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA4NmRmMzc1MGMxYTc3OTc4OTNjYmZiN2UyODc2ZDkyY2NlY2MyZjkxLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRp
b25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAot
RVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgdHlwZSBtZW1iZXIgbXVzdCBiZSBhIGJv
b2xlYW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1w
YXJhbWV0ZXItZmxhZy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBh
cmFtZXRlci1mbGFnLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3
YjJhZjBlNDdlOTNmODA0OTc5NDQ0NzI1N2RmMzI3MjNmMDY4MjQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFs
LXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1F
UlJPUjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSBwYXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xl
YW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBl
LW1lbWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVt
YmVyLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZGYzNzUwYzFh
Nzc5Nzg5M2NiZmI3ZTI4NzZkOTJjY2VjYzJmOTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVt
YmVyLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjogVGhlICdv
cHRpb25hbCcgZmxhZyBmb3IgYSB0eXBlIG1lbWJlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFs
LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5j
ZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5j
ZS5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmY1NzUzYTQzOTYx
NDRlYjU2NmM1YzU5NjhkMDQ5YWVjNjE4MmRiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZl
cmVuY2UuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9SOiBUeXBl
IHJlZmVyZW5jZSBjYW5ub3QgaGF2ZSBib3RoICd0eXBlJyBhbmQgJyRyZWYnIGtleXMuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uLWVycm9y
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbi1lcnJvcgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc2YmMxYzc3NzNhYTBkYTk4ODQ5YzkzYzM0YzM5
MmYxNjI3NjM5OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUtdHlwZS5qc29uLWVycm9yCisrKyAv
ZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFR5cGUgcmVmZXJlbmNlICdEYXRhYmFzZUlk
JyBpcyBub3QgYSBwcmltaXRpdmUgdHlwZS4gQWxsb3dlZCB2YWx1ZXM6IGludGVnZXIsIG51bWJl
ciwgc3RyaW5nLCBib29sZWFuLCBlbnVtLCBvYmplY3QsIGFycmF5LCBhbnkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9m
YWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13
aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDRlNDYyMjUwYzBhZjgwYTE3OWUwNmFhZjQ1ZDIxZWI1NDZkYjg4MTQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWxvd2Vy
Y2FzZS1uYW1lLmpzb24tZXJyb3IKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1FUlJPUjog
VHlwZXMgbXVzdCBiZWdpbiB3aXRoIGFuIHVwcGVyY2FzZSBjaGFyYWN0ZXIuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1l
cnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5q
c29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDM4ZTY0Njc1ZGE1YWU1
YzI2M2Q1NDZlODUzNGI0OWYzYjVlOWM5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNs
YXJhdGlvbi5qc29uLWVycm9yCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotRVJST1I6IFR5
cGUgcmVmZXJlbmNlICdkcmFnb24nIGlzIG5vdCBhIHByaW1pdGl2ZSB0eXBlLiBBbGxvd2VkIHZh
bHVlczogaW50ZWdlciwgbnVtYmVyLCBzdHJpbmcsIGJvb2xlYW4sIGVudW0sIG9iamVjdCwgYXJy
YXksIGFueQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBl
LW1lbWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBl
LW1lbWJlci5qc29uLWVycm9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWY2Njcy
Y2JlZjA5NjMwZmQ5YmU4ZmZhZGFjZTEyYzU2MTFjY2E4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4t
dHlwZS1tZW1iZXIuanNvbi1lcnJvcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUVSUk9S
OiBMb29rdXAgZmFpbGVkIGZvciB0eXBlIHJlZmVyZW5jZTogQ29sb3IgKHJlZmVyZW5jZWQgZnJv
bSBkb21haW46IEZhbnRhc3kpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1
cmUtZ3VhcmRzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJk
cy5qc29uLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk0NjY2ZDJjZDlk
MGE3OGIzNzUyN2Q2YzY4NmM0ZmJjZjkxMDE5My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpz
b24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTIzMSArMCwwIEBACi0jIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotLy8gTmV0d29yazEuCi1JbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazEubG9hZFJlc291cmNlIiwgW10s
IFtdKTsKLUluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmsxIik7Ci0KLS8v
IE5ldHdvcmszLgotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck5ldHdvcmszRGlzcGF0Y2hlciA9
IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9y
QmFja2VuZCwgIk5ldHdvcmszIik7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIk5l
dHdvcmszLnJlc291cmNlTG9hZGVkIiwgW10pOwotSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURv
bWFpbigiTmV0d29yazMiKTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRz
LmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgt
ZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZv
aWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3Bh
dGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAg
ICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotI2lmIFBMQVRGT1JNKFdF
Ql9DT01NQU5EUykKLWNsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgOiBw
dWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZpcnR1YWwg
fkFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElkKSA9IDA7Ci19OwotI2VuZGlmIC8vIFBMQVRGT1JN
KFdFQl9DT01NQU5EUykKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5l
cmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi0jaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaWYgUExBVEZPUk0oV0VCX0NPTU1B
TkRTKQotY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjsKLSNlbmRpZiAv
LyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi1jbGFzcyBO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYpID0gMDsKLXByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIH5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwotfTsKLSNlbmRpZiAvLyBQ
TEFURk9STShXRUJfQ09NTUFORFMpCi0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi1jbGFz
cyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJh
Y2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJp
ZGU7Ci1wcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQotcHVibGljOgotICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlz
cGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNw
YXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0K
LXByaXZhdGU6Ci0gICAgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRl
cm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OwotI2VuZGlmCi1wcml2YXRlOgotICAgIE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciopOwotICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KiBtX2FnZW50IHsgbnVsbHB0ciB9OwotfTsKLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFO
RFMpCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13
aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi1OZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6fk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Ci0j
ZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQotCi0jaWYgUExBVEZPUk0oV0VCX0NPTU1B
TkRTKQotUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2Vu
dCkpOwotfQotCi1OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQotICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBtX2FnZW50KGFnZW50KQotewotICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxp
dGVyYWwoIk5ldHdvcmsxIiksIHRoaXMpOwotfQotCi12b2lkIE5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVm
PEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQotewotICAgIFJlZjxOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1z
IiksIHBhcmFtZXRlcnMpOwotCi0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikKLSAg
ICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiTmV0d29y
azEiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKLX0KLQotdm9pZCBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiYpCi17Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0gICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShyZXF1ZXN0SWQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1f
YWdlbnQtPmxvYWRSZXNvdXJjZShlcnJvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQot
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZN
b3ZlKHJlc3VsdCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUo
ZXJyb3IpKTsKLX0KLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCi0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUt
Z3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgRnJvbnRlbmRSb3V0ZXI7
Ci0KLSNpZiBQTEFURk9STShXRUJfRVZFTlRTKQotY2xhc3MgTmV0d29yazNGcm9udGVuZERpc3Bh
dGNoZXIgewotcHVibGljOgotICAgIE5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5k
Um91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVy
KSB7IH0KLSAgICB2b2lkIHJlc291cmNlTG9hZGVkKCk7Ci1wcml2YXRlOgotICAgIEZyb250ZW5k
Um91dGVyJiBtX2Zyb250ZW5kUm91dGVyOwotfTsKLSNlbmRpZiAvLyBQTEFURk9STShXRUJfRVZF
TlRTKQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlu
cy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LSNpZiBQTEFURk9STShXRUJfRVZFTlRTKQotdm9pZCBOZXR3b3JrM0Zyb250ZW5kRGlzcGF0Y2hl
cjo6cmVzb3VyY2VMb2FkZWQoKQotewotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNz
YWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiTmV0d29yazMucmVzb3Vy
Y2VMb2FkZWQiKSk7Ci0KLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwotfQotI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9FVkVOVFMpCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZl
YXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9j
b2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotLy8gRm9yd2FyZCBkZWNsYXJh
dGlvbnMuCi0jaWYgUExBVEZPUk0oV0VCX1RZUEVTKQotbmFtZXNwYWNlIE5ldHdvcmsyIHsKLWNs
YXNzIE5ldHdvcmtFcnJvcjsKLX0gLy8gTmV0d29yazIKLSNlbmRpZiAvLyBQTEFURk9STShXRUJf
VFlQRVMpCi0vLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0KLSNpZiBQTEFU
Rk9STShXRUJfVFlQRVMpCi1uYW1lc3BhY2UgTmV0d29yazIgewotY2xhc3MgTmV0d29ya0Vycm9y
IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAg
ZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgTWVzc2FnZVNldCA9IDEg
PDwgMCwKLSAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0g
KE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypOZXR3b3JrRXJyb3IqL0luc3BlY3Rvck9i
amVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNT
ZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtFcnJvcjsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdl
U2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIpLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2Nv
ZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoQVNDSUlM
aXRlcmFsKCJjb2RlIiksIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29k
ZVNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZjxOZXR3b3JrRXJyb3I+IHJlbGVhc2Uo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVs
ZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
c2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9j
YXN0KTsKLQotICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1
bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVy
cHJldF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJnJlc3VsdCkpOwotICAgICAgICB9Ci0gICAg
fTsKLQotICAgIC8qCi0gICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxO
ZXR3b3JrRXJyb3I+IHJlc3VsdCA9IE5ldHdvcmtFcnJvcjo6Y3JlYXRlKCkKLSAgICAgKiAgICAg
LnNldE1lc3NhZ2UoLi4uKQotICAgICAqICAgICAuc2V0Q29kZSguLi4pCi0gICAgICogICAgIC5y
ZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBOZXR3b3JrMgotI2VuZGlmIC8v
IFBMQVRGT1JNKFdFQl9UWVBFUykKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3Vh
cmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLQotI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi19IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgotCi1AcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5k
bGVyOwotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0jaWYgUExBVEZPUk0oV0VCX0NPTU1B
TkRTKQotY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0g
ICAgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29s
TmV0d29yazFEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9
Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7
Ci1wcml2YXRlOgotICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhh
bmRsZXI+PiBtX2RlbGVnYXRlOwotfTsKLSNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMp
Ci0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBn
ZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQg
IlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50
ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqIF9jb250cm9sbGVyOwotICAgIGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxl
cj4gX25ldHdvcmsxSGFuZGxlcjsKLSAgICBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50
RGlzcGF0Y2hlciAqX25ldHdvcmszRXZlbnREaXNwYXRjaGVyOwotfQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNv
bnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xs
ZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MK
LXsKLSAgICBbX25ldHdvcmsxSGFuZGxlciByZWxlYXNlXTsKLSAgICBbX25ldHdvcmszRXZlbnRE
aXNwYXRjaGVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClz
ZXROZXR3b3JrMUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4p
aGFuZGxlcgotewotICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrMUhhbmRsZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOwotICAgIF9uZXR3b3Jr
MUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwotCi0gICAgYXV0byBhbHRlcm5hdGVEaXNwYXRj
aGVyID0gc3RkOjptYWtlX3VuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcj4oaGFuZGxlcik7Ci0gICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IHN0ZDo6bWFrZV91bmlx
dWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciwg
QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4+KEFTQ0lJTGl0ZXJhbCgiTmV0d29y
azEiKSwgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsKLSAgICBf
Y29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50KSk7Ci19
Ci0KLS0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4pbmV0d29yazFIYW5k
bGVyCi17Ci0gICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7Ci19Ci0KLS0gKFRlc3RQcm90b2Nv
bE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyICopbmV0d29yazNFdmVudERpc3BhdGNoZXIK
LXsKLSAgICBpZiAoIV9uZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcikKLSAgICAgICAgX25ldHdvcmsz
RXZlbnREaXNwYXRjaGVyID0gW1tUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0
Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVyXTsKLSAgICByZXR1cm4g
X25ldHdvcmszRXZlbnREaXNwYXRjaGVyOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5l
cmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3Rv
Y29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVy
ZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBwcm9wZXJ0eSAobm9u
YXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXROZXR3b3JrMUhhbmRsZXI6KSBpZDxUZXN0UHJvdG9j
b2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IG5ldHdvcmsxSGFuZGxlcjsKLUBwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgVGVzdFByb3RvY29sTmV0d29yazNEb21haW5FdmVudERpc3BhdGNo
ZXIgKm5ldHdvcmszRXZlbnREaXNwYXRjaGVyOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBn
ZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQotbmFtZXNwYWNl
IEluc3BlY3RvciB7Ci0KLSNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi12b2lkIE9iakNJbnNw
ZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0
SWQpCi17Ci0gICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKLSAgICB9OwotCi0gICAgaWQgc3VjY2Vz
c0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfTsKLQotICAgIFtt
X2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShX
RUJfQ09NTUFORFMpCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29u
ZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvclZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0KLUBp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlcgot
ewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0K
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlciopY29udHJvbGxlcjsKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAg
IGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7
Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0t
ICh2b2lkKXJlc291cmNlTG9hZGVkCi17Ci0gICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRl
ciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwotCi0gICAgUmVmPEluc3BlY3Rvck9i
amVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJO
ZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCIpKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQ
cm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13
aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KLQotCi1AY2xhc3MgVGVzdFBy
b3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3I7Ci0KLQotCi0KLV9fYXR0cmlidXRlX18oKHZpc2li
aWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdv
cmtFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
UGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29u
T2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNz
YWdlIGNvZGU6KGludCljb2RlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMs
IGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIGFzc2lnbikgaW50IGNvZGU7Ci1AZW5kCi0KLUBwcm90b2NvbCBUZXN0UHJvdG9jb2xO
ZXR3b3JrMURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgotQHJlcXVpcmVkCi0tICh2b2lkKWxvYWRS
ZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoKSlzdWNjZXNzQ2FsbGJhY2s7Ci1AZW5k
Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2
b2lkKXJlc291cmNlTG9hZGVkOwotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFy
ZHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi1A
aW50ZXJmYWNlIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2
YXRlKQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7Ci1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgot
I2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgot
T2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQot
Ci0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdl
bmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAi
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdv
cmsxRG9tYWluKQotCi1AZW5kCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoTmV0d29yazJEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlTmV0d29ya0Vycm9yOihUZXN0UHJv
dG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5
bG9hZDsKLQotQGVuZAotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKE5l
dHdvcmszRG9tYWluKQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMgKE5ldHdvcmsxRG9tYWluKQotCi1AZW5kCi1AaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrMkRvbWFpbikKLQotKyAodm9pZClfcGFy
c2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0g
W1tUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2Fk
OnBheWxvYWRdOwotfQotCi1AZW5kCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zIChOZXR3b3JrM0RvbWFpbikKLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRv
bWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW1wb3J0IDx3dGYv
QXNzZXJ0aW9ucy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IKLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwg
aWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAg
ICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKLSAgICBzZWxmLm1lc3NhZ2UgPSBw
YXlsb2FkW0AibWVzc2FnZSJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKLSAgICBzZWxmLmNvZGUgPSBbcGF5
bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilq
c29uT2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9i
amVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKLXsKLSAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7Ci0K
LSAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIHNlbGYuY29kZSA9IGNvZGU7Ci0KLSAg
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3Nh
Z2UKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwot
fQotCi0tIChOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zv
cktleTpAIm1lc3NhZ2UiXTsKLX0KLQotLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQotewotICAg
IFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOwotfQotCi0tIChpbnQpY29k
ZQotewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKLX0KLQotQGVu
ZAotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRp
ZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDhhZWQyYjc1NTZkNWE1NGM1MmY2YjVmNjc2YjYyOTVlYTIzNzEyMjAuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9t
YWluLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsODkxICswLDAgQEAKLSMjIyBCZWdp
biBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10
eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGlj
OgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVy
PiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hl
cik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0
cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5k
IEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0j
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5j
bHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMj
IyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIkluc3BlY3RvckZyb250
ZW5kUm91dGVyLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xPYmplY3RzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUt
aWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
clByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0vLyBUeXBl
ZGVmcy4KLW5hbWVzcGFjZSBSdW50aW1lIHsKLS8qIFVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4g
Ki8KLXR5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOwotfSAvLyBSdW50aW1lCi0KLW5hbWVz
cGFjZSBSdW50aW1lMiB7Ci0vKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuICovCi10eXBlZGVm
IFN0cmluZyBSZW1vdGVPYmplY3RJZDsKLX0gLy8gUnVudGltZTIKLS8vIEVuZCBvZiB0eXBlZGVm
cy4KLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
bmFtZXNwYWNlIFByb3RvY29sIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJl
bnQtZG9tYWluLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBF
bmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgot
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRy
b2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgotewotICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmls
OwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzdXBlciBk
ZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVu
dC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18o
KHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1
cmF0aW9uIDogTlNPYmplY3QKLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENv
bmZpZ3VyYXRpb24uaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlk
LWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQot
Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xF
dmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEV2ZW50RGlzcGF0Y2hlcnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlk
LWRpZmZlcmVudC1kb21haW4uanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
clZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4u
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5
Q29udmVyc2lvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIE9iakNFbnVtVHlwZT4KLU9iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSk7Ci0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KLS8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCi0jaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotCi11c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoUnVudGltZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNTdHJp
bmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLUBpbnRlcmZh
Y2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lMkRvbWFpbikKLQotKyAodm9p
ZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJ
ZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwot
ICAgICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBheWxvYWQ7Ci19Ci0KLUBlbmQKLUBpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWUyRG9tYWluKQotCi0r
ICh2b2lkKV9wYXJzZVJlbW90ZU9iamVjdElkOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5
bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TU3RyaW5nICopcGF5
bG9hZDsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWlu
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9S
V0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JWYWx1ZXMuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFhNWExMWQ0MzcwYjRkYjA3OGRmNDM3MjVkNGI0NmMz
ZjY0OWUwOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hh
ZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAg
LTEsMTA5MyArMCwwIEBACi0jIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRz
LmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwt
dHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xhc3MgQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNo
ZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlz
cGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAgICBCYWNrZW5kRGlzcGF0Y2hlciog
YmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdl
dCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5k
RGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jIyMgRW5kIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJz
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0
dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250ZW5kUm91dGVyOwot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3Bw
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlw
ZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgiCi0KLSNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNw
cAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotbmFt
ZXNwYWNlIFByb3RvY29sIHsKLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1lc3BhY2Ug
UnVudGltZSB7Ci1jbGFzcyBLZXlQYXRoOwotfSAvLyBSdW50aW1lCi0vLyBFbmQgb2YgZm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuCi0KLQotCi0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLVN0cmlu
ZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKLXsKLSAgICByZXR1cm4g
Z2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKLQotbmFtZXNwYWNlIFJ1bnRpbWUgewotLyogS2V5
IHBhdGguICovCi1jbGFzcyBLZXlQYXRoIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlw
ZScgd2hpbGUgZ2VuZXJhdGluZyBLZXlQYXRoLgotICAgIGVudW0gY2xhc3MgVHlwZSB7Ci0gICAg
ICAgIE51bGwgPSAwLAotICAgICAgICBTdHJpbmcgPSAxLAotICAgICAgICBBcnJheSA9IDIsCi0g
ICAgfTsgLy8gZW51bSBjbGFzcyBUeXBlCi0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKLSAgICAgICAgVHlwZVNldCA9IDEgPDwgMCwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0g
KFR5cGVTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBC
dWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBt
X3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBCdWlsZGVyKFJlZjwvKktleVBhdGgqL0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCi0g
ICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRl
ZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIEtl
eVBhdGg7Ci0gICAgcHVibGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYg
c2V0VHlwZShUeXBlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwotICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInR5cGUiKSwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBSZWY8S2V5UGF0aD4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0g
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoS2V5UGF0aCkgPT0gc2l6ZW9mKEluc3Bl
Y3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIHJl
dHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxLZXlQYXRoPio+KCZyZXN1bHQpKTsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKLSAgICAgKiBSZWY8S2V5UGF0aD4gcmVzdWx0ID0gS2V5UGF0aDo6Y3JlYXRlKCkKLSAgICAg
KiAgICAgLnNldFR5cGUoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAg
IHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwotICAg
IH0KLQotICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAg
ICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzdHJpbmci
KSwgdmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQgc2V0QXJyYXkoUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IHZhbHVlKQotICAgIHsKLSAgICAgICAgSW5zcGVjdG9y
T2JqZWN0QmFzZTo6c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhcnJheSIpLCBXVEZNb3ZlKHZhbHVl
KSk7Ci0gICAgfQotfTsKLQotfSAvLyBSdW50aW1lCi0KLQotCi1uYW1lc3BhY2UgVGVzdEhlbHBl
cnMgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgotc3RkOjpvcHRpb25h
bDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5n
Jik7Ci0KLS8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1zdGQ6
Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQ
YXRoOjpUeXBlPihjb25zdCBTdHJpbmcmKTsKLQotfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMK
LQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
aGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNw
YWNlIFByb3RvY29sIHsKLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Ci0gICAgIm51bGwiLAotICAg
ICJzdHJpbmciLAotICAgICJhcnJheSIsCi19OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFs
dWUoaW50IGNvZGUpIHsKLSAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Ci19
Ci0KLS8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1zdGQ6Om9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRo
OjpUeXBlPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpOdWxsLAotICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6OlN0cmluZywKLSAg
ICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBl
OjpBcnJheSwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQotICAg
ICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRW
YWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpLZXlQYXRoOjpUeXBlKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotfSAvLyBu
YW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hl
cnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0
dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVE
aXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxm
KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVh
bGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2Nv
bC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZh
Y2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotCi1uYW1l
c3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5o
IgotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JW
YWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2Vk
LW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotQGNsYXNzIFRl
c3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoOwotCi0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSkgewotICAgIFRlc3RQcm90b2NvbFJ1bnRp
bWVLZXlQYXRoVHlwZU51bGwsCi0gICAgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlU3Ry
aW5nLAotICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZUFycmF5LAotfTsKLQotCi1f
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFBy
b3RvY29sUnVudGltZUtleVBhdGggOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXls
b2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFR5cGU6KFRlc3RQ
cm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlIHR5cGU7
Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0
cmluZzsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKmFycmF5OwotQGVuZAotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUt
c2V0dGVycy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+
Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lv
bnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIE9iakNF
bnVtVHlwZT4KLU9iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2
YWx1ZSk7Ci0KLQotaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFJ1
bnRpbWVLZXlQYXRoVHlwZSB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZU51bGw6Ci0gICAgICAgIHJldHVybiBBU0NJ
SUxpdGVyYWwoIm51bGwiKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlw
ZVN0cmluZzoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgic3RyaW5nIik7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGVBcnJheToKLSAgICAgICAgcmV0dXJuIEFT
Q0lJTGl0ZXJhbCgiYXJyYXkiKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBUZXN0
UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJudWxsIikKLSAgICAgICAgcmV0dXJuIFRl
c3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZU51bGw7Ci0gICAgaWYgKHZhbHVlID09ICJzdHJp
bmciKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlU3RyaW5n
OwotICAgIGlmICh2YWx1ZSA9PSAiYXJyYXkiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
UnVudGltZUtleVBhdGhUeXBlQXJyYXk7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZU51bGw7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0K
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBl
LXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQot
Ci0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQ
cml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLUBpbnRlcmZhY2UgVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJz
ZUtleVBhdGg6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlS2V5UGF0aDoo
VGVzdFByb3RvY29sUnVudGltZUtleVBhdGggKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0Rp
Y3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFJ1bnRpbWVL
ZXlQYXRoIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0j
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgotI2lt
cG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQot
Ci1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGgKLQotLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwg
aWQ+ICopcGF5bG9hZAotewotICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAg
ICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WShwYXlsb2FkW0AidHlwZSJdLCBAInR5cGUiKTsKLSAgICBzZWxmLnR5cGUgPSBmcm9tUHJvdG9j
b2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPihwYXlsb2FkW0AidHlwZSJd
KTsKLQotICAgIHNlbGYuc3RyaW5nID0gcGF5bG9hZFtAInN0cmluZyJdOwotCi0gICAgc2VsZi5h
cnJheSA9IG9iamNBcnJheUZyb21QYXlsb2FkPE5TU3RyaW5nPihwYXlsb2FkW0AiYXJyYXkiXSk7
Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmpl
Y3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3QKLXsKLSAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltqc29uT2JqZWN0IHRvSW5zcGVjdG9y
T2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVL
ZXlQYXRoVHlwZSl0eXBlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0KLSAgICBzZWxmLnR5cGUgPSB0eXBlOwotCi0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKHZvaWQpc2V0VHlwZTooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBl
KXR5cGUKLXsKLSAgICBbc3VwZXIgc2V0U3RyaW5nOnRvUHJvdG9jb2xTdHJpbmcodHlwZSkgZm9y
S2V5OkAidHlwZSJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlw
ZQotewotICAgIHJldHVybiBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZUtl
eVBhdGhUeXBlPihbc3VwZXIgc3RyaW5nRm9yS2V5OkAidHlwZSJdKTsKLX0KLQotLSAodm9pZClz
ZXRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpzdHJp
bmcgZm9yS2V5OkAic3RyaW5nIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAg
cmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJzdHJpbmciXTsKLX0KLQotLSAodm9pZClzZXRB
cnJheTooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYXJyYXkKLXsKLSAgICBbc3VwZXIgc2V0SW5z
cGVjdG9yQXJyYXk6aW5zcGVjdG9yU3RyaW5nQXJyYXkoYXJyYXkpIGZvcktleTpAImFycmF5Il07
Ci19Ci0KLS0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWFycmF5Ci17Ci0gICAgcmV0dXJuIG9i
amNTdHJpbmdBcnJheShbc3VwZXIgaW5zcGVjdG9yQXJyYXlGb3JLZXk6QCJhcnJheSJdKTsKLX0K
LQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjdkNTAxYjM4Yzk1NDQyYjk4NzlmMDQ4NGM5NzgwNWM5
NDU2OGFhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKKysrIC9kZXYv
bnVsbApAQCAtMSw4NjIgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5k
cy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlh
c2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLQotbmFtZXNwYWNlIEluc3Bl
Y3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAg
ICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBk
aXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9
Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFj
a2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmlt
aXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgotI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMj
IyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0jaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgot
I2VuZGlmCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMj
IEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUu
anNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9udGVuZFJvdXRlcjsKLQotfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1w
cmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oIgotCi0jaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi19IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlw
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLQotCi0vLyBUeXBlZGVmcy4KLW5hbWVz
cGFjZSBSdW50aW1lIHsKLS8qIFVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4gKi8KLXR5cGVkZWYg
aW50IFJlbW90ZU9iamVjdElkOwotfSAvLyBSdW50aW1lCi0vLyBFbmQgb2YgdHlwZWRlZnMuCi0K
LQotCi19IC8vIG5hbWVzcGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wK
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQot
Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUt
dHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgot
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVE
aXNwYXRjaGFibGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxm
KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29u
dHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVh
bGxvYwotewotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rl
c3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkK
LUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlw
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgi
Ci0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
clZhbHVlcy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVy
cy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNl
ZC1wcmltaXRpdmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNo
ZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlw
ZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVy
bmFsLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclZhbHVlcy5oPgotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVy
bmFsLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2Vk
LXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PYmpDRW51bVR5cGUgZnJvbVByb3Rv
Y29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQot
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0K
LSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFBy
aXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNl
UmVtb3RlT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TTnVt
YmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsKLSAgICAqb3V0
VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2
YXRlLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbXBv
cnQgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRl
Y2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10
eXBlLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDY3ZmFjZDVl
YzgxZTVlZmNjNGFhYWUxZWQyZWY1N2ZmZDRlMmM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1
bHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDM1ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQotCi0vLyBEZWJ1Z2dlci4KLUluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJFbnVtKCJEZWJ1Z2dlci5SZWFzb24iLCB7RGllZDogIkRpZWQiLCBGYWludGVkOiAiRmFp
bnRlZCIsIEh1bmdyeTogIkh1bmdyeSJ9KTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2Vu
ZENvbW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKLSNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9y
IHsKLQotY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewotcHVibGljOgotICAgIHZv
aWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3Bh
dGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KLSAg
ICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Ci1wcml2YXRlOgotICAgIFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLX07Ci0KLQotCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCi0jIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24K
LS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKLQotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLWNsYXNzIEZyb250
ZW5kUm91dGVyOwotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTogVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgot
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0K
LQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1uYW1l
c3BhY2UgRGVidWdnZXIgewotZW51bSBjbGFzcyBSZWFzb247Ci19IC8vIERlYnVnZ2VyCi0vLyBF
bmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1lc3BhY2Ug
RGVidWdnZXIgewotdHlwZWRlZiBpbnQgQnJlYWtwb2ludElkOwotfSAvLyBEZWJ1Z2dlcgotCi1u
YW1lc3BhY2UgUnVudGltZSB7Ci10eXBlZGVmIGludCBPYmplY3RJZDsKLXR5cGVkZWYgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXJyYXk8aW50PiBMdWNreU51bWJlcnM7Ci10eXBlZGVmIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4gQmFieU5hbWVzOwotdHlwZWRlZiBJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpPYmplY3RJZD4g
TmV3T2JqZWN0czsKLXR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZD4gT2xkT2JqZWN0czsKLXR5cGVkZWYg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6
OlJlYXNvbj4gU3RvcFJlYXNvbnM7Ci19IC8vIFJ1bnRpbWUKLS8vIEVuZCBvZiB0eXBlZGVmcy4K
LQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVl
KGludCBjb2RlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFu
dFZhbHVlKFQgZW51bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShz
dGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVs
cGVycwotCi1uYW1lc3BhY2UgRGVidWdnZXIgewotLyogICovCi1lbnVtIGNsYXNzIFJlYXNvbiB7
Ci0gICAgRGllZCA9IDAsCi0gICAgRmFpbnRlZCA9IDEsCi0gICAgSHVuZ3J5ID0gMiwKLX07IC8v
IGVudW0gY2xhc3MgUmVhc29uCi19IC8vIERlYnVnZ2VyCi0KLQotCi1uYW1lc3BhY2UgVGVzdEhl
bHBlcnMgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgotc3RkOjpvcHRp
b25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3Ry
aW5nJik7Ci0KLS8vIEVudW1zIGluIHRoZSAnRGVidWdnZXInIERvbWFpbgotdGVtcGxhdGU8Pgot
c3RkOjpvcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNv
bj4oY29uc3QgU3RyaW5nJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8g
bmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKLQotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBQcm90b2Nv
bCB7Ci0KLW5hbWVzcGFjZSBUZXN0SGVscGVycyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewotICAgICJEaWVkIiwKLSAgICAiRmFpbnRlZCIs
Ci0gICAgIkh1bmdyeSIsCi19OwotCi1TdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNv
ZGUpIHsKLSAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Ci19Ci0KLS8vIEVu
dW1zIGluIHRoZSAnRGVidWdnZXInIERvbWFpbgotdGVtcGxhdGU8Pgotc3RkOjpvcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4oY29uc3QgU3RyaW5n
JiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFs
dWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6
OlJlYXNvbjo6RGllZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1
Z2dlcjo6UmVhc29uOjpGYWludGVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpSZWFzb246Okh1bmdyeSwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgMzsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25z
dGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNw
ZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uKWNvbnN0YW50VmFsdWVzW2ldOwotCi0g
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVy
cwotCi0KLQotfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KLQotCi0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0KLQotCi0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24ubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwot
ICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxl
cik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQot
Ci0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9U
ZXN0UHJvdG9jb2wuaD4KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkp
Ci1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAot
Ci0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
Y29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0K
LQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+Ci0KLQot
Ci0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGVidWdnZXJSZWFz
b24pIHsKLSAgICBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkRpZWQsCi0gICAgVGVzdFByb3Rv
Y29sRGVidWdnZXJSZWFzb25GYWludGVkLAotICAgIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29u
SHVuZ3J5LAotfTsKLQotCi0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KLS8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0j
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgotCi1uYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgotT2JqQ0VudW1U
eXBlIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKLQotCi1pbmxpbmUg
U3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb24gdmFsdWUp
Ci17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJl
YXNvbkRpZWQ6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkRpZWQiKTsKLSAgICBjYXNl
IFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRmFpbnRlZDoKLSAgICAgICAgcmV0dXJuIEFTQ0lJ
TGl0ZXJhbCgiRmFpbnRlZCIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25I
dW5ncnk6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkh1bmdyeSIpOwotICAgIH0KLX0K
LQotdGVtcGxhdGU8PgotaW5saW5lIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uIGZyb21Qcm90
b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiRGll
ZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkRpZWQ7Ci0gICAg
aWYgKHZhbHVlID09ICJGYWludGVkIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERlYnVn
Z2VyUmVhc29uRmFpbnRlZDsKLSAgICBpZiAodmFsdWUgPT0gIkh1bmdyeSIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkh1bmdyeTsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25EaWVkOwotfQot
Ci0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZVBhcnNlci5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdFByaXZhdGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKERlYnVnZ2VyRG9tYWluKQotCi0r
ICh2b2lkKV9wYXJzZUJyZWFrcG9pbnRJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVJlYXNvbjooTlNOdW1iZXIgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQKLUBpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zIChSdW50aW1lRG9tYWluKQotCi0rICh2b2lkKV9wYXJzZU9iamVj
dElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZv
aWQpX3BhcnNlTHVja3lOdW1iZXJzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUJhYnlOYW1lczooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAo
dm9pZClfcGFyc2VOZXdPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZU9sZE9iamVjdHM6KE5TQXJy
YXkvKjxOU051bWJlcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsg
KHZvaWQpX3BhcnNlU3RvcFJlYXNvbnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEZWJ1Z2dlckRvbWFpbikKLQotKyAodm9pZClfcGFy
c2VCcmVha3BvaW50SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1i
ZXIgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOwotfQotCi0r
ICh2b2lkKV9wYXJzZVJlYXNvbjooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U1N0cmluZyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IEAoSW5zcGVjdG9yOjpmcm9tUHJvdG9j
b2xTdHJpbmc8VGVzdFByb3RvY29sRGVidWdnZXJSZWFzb24+KHBheWxvYWQpKTsKLX0KLQotQGVu
ZAotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURv
bWFpbikKLQotKyAodm9pZClfcGFyc2VPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJv
bVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBF
KHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAq
KXBheWxvYWQ7Ci19Ci0KLSsgKHZvaWQpX3BhcnNlTHVja3lOdW1iZXJzOihOU0FycmF5Lyo8TlNO
dW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8TlNOdW1iZXI+Ki8g
Y2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TTnVtYmVyPiovICopcGF5bG9h
ZDsKLX0KLQotKyAodm9pZClfcGFyc2VCYWJ5TmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU1N0cmluZz4qLyBjbGFzc10pOwot
ICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilwYXlsb2FkOwotfQotCi0r
ICh2b2lkKV9wYXJzZU5ld09iamVjdHM6KE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKilvdXRWYWx1
ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X1RZUEUocGF5bG9hZCwgW05TQXJyYXkvKjxOU051bWJlcj4qLyBjbGFzc10pOwotICAgICpvdXRW
YWx1ZSA9IChOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9w
YXJzZU9sZE9iamVjdHM6KE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5
bG9hZCwgW05TQXJyYXkvKjxOU051bWJlcj4qLyBjbGFzc10pOwotICAgICpvdXRWYWx1ZSA9IChO
U0FycmF5Lyo8TlNOdW1iZXI+Ki8gKilwYXlsb2FkOwotfQotCi0rICh2b2lkKV9wYXJzZVN0b3BS
ZWFzb25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8q
PE5TU3RyaW5nPiovICopcGF5bG9hZDsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlcy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tYXJyYXktdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJu
YWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9u
cy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQotCi0KLQotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51
bS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTY0MDA1ZGQ4ODBhNjBkYjkzMTgzODky
ZGYxNTkyMDg0ZGU0NDJkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdAorKysgL2Rldi9udWxs
CkBAIC0xLDEwMzcgKzAsMCBAQAotIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21t
YW5kcy5qcwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotLy8gUnVudGltZS4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJSdW50aW1l
LkZhcm1BbmltYWxzIiwge1BpZ3M6ICJQaWdzIiwgQ293czogIkNvd3MiLCBDYXRzOiAiQ2F0cyIs
IEhlbnM6ICJIZW5zIn0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlJ1bnRpbWUu
VHdvTGVnZ2VkQW5pbWFscyIsIHtEdWNrczogIkR1Y2tzIiwgSGVuczogIkhlbnMiLCBDcm93czog
IkNyb3dzIiwgRmxhbWluZ29zOiAiRmxhbWluZ29zIn0pOwotIyMjIEVuZCBGaWxlOiBJbnNwZWN0
b3JCYWNrZW5kQ29tbWFuZHMuanMKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLQotbmFtZXNwYWNlIElu
c3BlY3RvciB7Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoK
LSAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4m
JiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIp
OyB9Ci0gICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8
QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBF
cnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oIgotCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotI2luY2x1ZGUgIlRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBG
cm9udGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5
cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+
Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LQotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLW5h
bWVzcGFjZSBSdW50aW1lIHsKLWVudW0gY2xhc3MgRmFybUFuaW1hbHM7Ci1lbnVtIGNsYXNzIFR3
b0xlZ2dlZEFuaW1hbHM7Ci19IC8vIFJ1bnRpbWUKLS8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0
aW9ucy4KLQotCi0KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotU3RyaW5nIGdldEVudW1D
b25zdGFudFZhbHVlKGludCBjb2RlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdl
dEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQotewotICAgIHJldHVybiBnZXRFbnVtQ29u
c3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBUZXN0SGVscGVycwotCi1uYW1lc3BhY2UgUnVudGltZSB7Ci0vKiAgKi8KLWVudW0gY2xh
c3MgRmFybUFuaW1hbHMgewotICAgIFBpZ3MgPSAwLAotICAgIENvd3MgPSAxLAotICAgIENhdHMg
PSAyLAotICAgIEhlbnMgPSAzLAotfTsgLy8gZW51bSBjbGFzcyBGYXJtQW5pbWFscwotLyogICov
Ci1lbnVtIGNsYXNzIFR3b0xlZ2dlZEFuaW1hbHMgewotICAgIER1Y2tzID0gNCwKLSAgICBIZW5z
ID0gMywKLSAgICBDcm93cyA9IDUsCi0gICAgRmxhbWluZ29zID0gNiwKLX07IC8vIGVudW0gY2xh
c3MgVHdvTGVnZ2VkQW5pbWFscwotfSAvLyBSdW50aW1lCi0KLQotCi1uYW1lc3BhY2UgVGVzdEhl
bHBlcnMgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgotc3RkOjpvcHRp
b25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3Ry
aW5nJik7Ci0KLS8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCi10ZW1wbGF0ZTw+Ci1z
dGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFy
bUFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwotdGVtcGxhdGU8Pgotc3RkOjpvcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFs
cz4oY29uc3QgU3RyaW5nJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8g
bmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bE9iamVjdHMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29s
IHsKLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Ci0gICAgIlBpZ3MiLAotICAgICJDb3dzIiwKLSAg
ICAiQ2F0cyIsCi0gICAgIkhlbnMiLAotICAgICJEdWNrcyIsCi0gICAgIkNyb3dzIiwKLSAgICAi
RmxhbWluZ29zIiwKLX07Ci0KLVN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkg
ewotICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKLX0KLQotLy8gRW51bXMg
aW4gdGhlICdSdW50aW1lJyBEb21haW4KLXRlbXBsYXRlPD4KLXN0ZDo6b3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4oY29uc3QgU3Ry
aW5nJiBwcm90b2NvbFN0cmluZykKLXsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50
VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6RmFybUFuaW1hbHM6OlBpZ3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNvd3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNhdHMsCi0gICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkhlbnMsCi0gICAgfTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgaWYgKHByb3RvY29s
U3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAg
ICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHMp
Y29uc3RhbnRWYWx1ZXNbaV07Ci0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQotCi10ZW1w
bGF0ZTw+Ci1zdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xl
Z2dlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5n
KQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxz
OjpEdWNrcywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpU
d29MZWdnZWRBbmltYWxzOjpIZW5zLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkNyb3dzLAotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkZsYW1pbmdvcywK
LSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQotICAgICAgICBpZiAo
cHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1d
KQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29M
ZWdnZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi0K
LQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcu
aCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRj
aGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVu
dGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KLXsKLSAgICBBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIK
LXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxlcik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250
cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBb
c3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgotCi1fX2F0dHJpYnV0
ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbiA6IE5TT2JqZWN0Ci1AZW5kCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmRE
aXNwYXRjaGVycy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0K
LQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCi0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0Lmg+Ci0KLQotCi0KLQotdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFBy
b3RvY29sUnVudGltZUZhcm1BbmltYWxzKSB7Ci0gICAgVGVzdFByb3RvY29sUnVudGltZUZhcm1B
bmltYWxzUGlncywKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDb3dzLAotICAg
IFRlc3RQcm90b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0NhdHMsCi0gICAgVGVzdFByb3RvY29sUnVu
dGltZUZhcm1BbmltYWxzSGVucywKLX07Ci0KLXR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRl
c3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzKSB7Ci0gICAgVGVzdFByb3RvY29sUnVu
dGltZVR3b0xlZ2dlZEFuaW1hbHNEdWNrcywKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVn
Z2VkQW5pbWFsc0hlbnMsCi0gICAgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHND
cm93cywKLSAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0ZsYW1pbmdvcywK
LX07Ci0KLQotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAotCi0jIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgi
Ci0jaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tZW51bS10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0
b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PYmpDRW51bVR5cGUgZnJvbVBy
b3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi0KLWlubGluZSBTdHJpbmcgdG9Q
cm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHMgdmFsdWUpCi17Ci0g
ICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1h
bHNQaWdzOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJQaWdzIik7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDb3dzOgotICAgICAgICByZXR1cm4gQVNDSUlM
aXRlcmFsKCJDb3dzIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHND
YXRzOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJDYXRzIik7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNIZW5zOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRl
cmFsKCJIZW5zIik7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgVGVzdFByb3RvY29s
UnVudGltZUZhcm1BbmltYWxzIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KQotewotICAgIGlmICh2YWx1ZSA9PSAiUGlncyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9j
b2xSdW50aW1lRmFybUFuaW1hbHNQaWdzOwotICAgIGlmICh2YWx1ZSA9PSAiQ293cyIpCi0gICAg
ICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDb3dzOwotICAgIGlmICh2
YWx1ZSA9PSAiQ2F0cyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFu
aW1hbHNDYXRzOwotICAgIGlmICh2YWx1ZSA9PSAiSGVucyIpCi0gICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNIZW5zOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzOwotfQotCi1p
bmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dl
ZEFuaW1hbHMgdmFsdWUpCi17Ci0gICAgc3dpdGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJv
dG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0R1Y2tzOgotICAgICAgICByZXR1cm4gQVNDSUlM
aXRlcmFsKCJEdWNrcyIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFu
aW1hbHNIZW5zOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJIZW5zIik7Ci0gICAgY2Fz
ZSBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0Nyb3dzOgotICAgICAgICByZXR1
cm4gQVNDSUlMaXRlcmFsKCJDcm93cyIpOwotICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3
b0xlZ2dlZEFuaW1hbHNGbGFtaW5nb3M6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkZs
YW1pbmdvcyIpOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIFRlc3RQcm90b2NvbFJ1
bnRpbWVUd29MZWdnZWRBbmltYWxzIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiRHVja3MiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNEdWNrczsKLSAgICBpZiAodmFsdWUgPT0gIkhl
bnMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNI
ZW5zOwotICAgIGlmICh2YWx1ZSA9PSAiQ3Jvd3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNDcm93czsKLSAgICBpZiAodmFsdWUgPT0gIkZsYW1p
bmdvcyIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFs
c0ZsYW1pbmdvczsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gVGVzdFBy
b3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNEdWNrczsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpz
b24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAi
Y29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQotI2lt
cG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgi
Ci0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgot
Ci11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKLQotKyAodm9pZClfcGFyc2VGYXJtQW5pbWFs
czooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lk
KV9wYXJzZVR3b0xlZ2dlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRmFybUFuaW1hbHM6
KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAg
ICAqb3V0VmFsdWUgPSBAKEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2Nv
bFJ1bnRpbWVGYXJtQW5pbWFscz4ocGF5bG9hZCkpOwotfQotCi0rICh2b2lkKV9wYXJzZVR3b0xl
Z2dlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
Ci17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcg
Y2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBAKEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzPihwYXlsb2FkKSk7Ci19Ci0KLUBl
bmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0j
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+
Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
dHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LW9iamVjdC10eXBlLmpzb24tcmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
OWMwNjZmNDAzODdlMzI0NWJhN2FlN2RhZDRjNzMzZGZjMzhiMDNhLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBl
Lmpzb24tcmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMTk5MyArMCwwIEBACi0jIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0jIyMgRW5kIEZpbGU6IEluc3BlY3RvckJh
Y2tlbmRDb21tYW5kcy5qcwotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgotI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0KLW5hbWVzcGFjZSBJbnNw
ZWN0b3IgewotCi1jbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7Ci1wdWJsaWM6Ci0g
ICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYg
ZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsg
fQotICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEJh
Y2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwotfTsKLQotCi0KLQotfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKLSMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0jaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmluZyBF
cnJvclN0cmluZzsKLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0jaW5jbHVkZSAi
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotY2xh
c3MgRnJvbnRlbmRSb3V0ZXI7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1v
YmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29s
VHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotCi0KLW5hbWVzcGFjZSBQcm90b2NvbCB7Ci0KLS8vIEZvcndhcmQgZGVjbGFyYXRp
b25zLgotbmFtZXNwYWNlIERhdGFiYXNlIHsKLWNsYXNzIEVycm9yOwotY2xhc3MgT3B0aW9uYWxQ
YXJhbWV0ZXJCdW5kbGU7Ci1jbGFzcyBQYXJhbWV0ZXJCdW5kbGU7Ci1jbGFzcyBPYmplY3RXaXRo
UHJvcGVydHlOYW1lQ29uZmxpY3RzOwotY2xhc3MgRHVtbXlPYmplY3Q7Ci19IC8vIERhdGFiYXNl
Ci0KLW5hbWVzcGFjZSBUZXN0IHsKLWNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKLX0gLy8gVGVzdAot
Ly8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgotCi0KLS8vIFR5cGVkZWZzLgotbmFtZXNw
YWNlIERhdGFiYXNlIHsKLXR5cGVkZWYgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBFcnJvckxpc3Q7Ci19IC8vIERhdGFiYXNl
Ci0vLyBFbmQgb2YgdHlwZWRlZnMuCi0KLW5hbWVzcGFjZSBEYXRhYmFzZSB7Ci0vKiBEYXRhYmFz
ZSBlcnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwK
LSAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKLSAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwK
LSAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQotICAgIH07Ci0K
LSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAgcHJpdmF0
ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAg
dGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihSZWY8LypF
cnJvciovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQo
V1RGTW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
LSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7Ci0gICAgcHVibGljOgotCi0g
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJp
bmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwgdmFsdWUpOwot
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBw
cm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRl
Z2VyKEFTQ0lJTGl0ZXJhbCgiY29kZSIpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPENvZGVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8RXJyb3I+IHJlbGVh
c2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxG
aWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3Qp
OwotCi0gICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5y
ZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0
X2Nhc3Q8UmVmPEVycm9yPio+KCZyZXN1bHQpKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAv
KgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8RXJyb3I+IHJlc3Vs
dCA9IEVycm9yOjpjcmVhdGUoKQotICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCi0gICAgICog
ICAgIC5zZXRDb2RlKC4uLikKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBz
dGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9
Ci19OwotCi1jbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdEJhc2UgewotcHVibGljOgotICAgIGVudW0gewotICAgICAgICBOb0Zp
ZWxkc1NldCA9IDAsCi0gICAgICAgIEFsbEZpZWxkc1NldCA9IDAKLSAgICB9OwotCi0gICAgdGVt
cGxhdGU8aW50IFNUQVRFPgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qT3B0aW9uYWxQ
YXJhbWV0ZXJCdW5kbGUqL0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6
IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIE9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlOwotICAgIHB1YmxpYzoKLQotICAgICAgICBSZWY8T3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGU+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlKSA9PSBzaXplb2Yo
SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotCi0gICAgICAgICAgICBSZWY8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICAg
ICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlPio+KCZyZXN1bHQpKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKLSAgICAgKiBSZWY8T3B0aW9uYWxQYXJhbWV0ZXJCdW5k
bGU+IHJlc3VsdCA9IE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQotICAgICAqICAg
ICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0Q29sdW1uTmFtZXMo
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IHZhbHVlKQotICAgIHsK
LSAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1
bW5OYW1lcyIpLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXROb3Rlcyhj
b25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6
c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgdmFsdWUpOwotICAgIH0KLQotICAgIHZv
aWQgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9i
amVjdEJhc2U6OnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB2YWx1ZSk7Ci0g
ICAgfQotCi0gICAgdm9pZCBzZXRWYWx1ZXMoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVj
dChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAg
dm9pZCBzZXRQYXlsb2FkKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldFZhbHVlKEFTQ0lJTGl0ZXJh
bCgicGF5bG9hZCIpLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRFcnJv
cihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdChBU0NJSUxpdGVyYWwo
ImVycm9yIiksIFdURk1vdmUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEVycm9yTGlz
dChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yTGlzdD4gdmFsdWUp
Ci0gICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRBcnJheShBU0NJSUxpdGVy
YWwoImVycm9yTGlzdCIpLCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgfQotfTsKLQotY2xhc3MgUGFy
YW1ldGVyQnVuZGxlIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7Ci1w
dWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgQ29s
dW1uTmFtZXNTZXQgPSAxIDw8IDAsCi0gICAgICAgIE5vdGVzU2V0ID0gMSA8PCAxLAotICAgICAg
ICBUaW1lc3RhbXBTZXQgPSAxIDw8IDIsCi0gICAgICAgIFZhbHVlc1NldCA9IDEgPDwgMywKLSAg
ICAgICAgUGF5bG9hZFNldCA9IDEgPDwgNCwKLSAgICAgICAgRXJyb3JTZXQgPSAxIDw8IDUsCi0g
ICAgICAgIEVycm9yTGlzdFNldCA9IDEgPDwgNiwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gKENv
bHVtbk5hbWVzU2V0IHwgTm90ZXNTZXQgfCBUaW1lc3RhbXBTZXQgfCBWYWx1ZXNTZXQgfCBQYXls
b2FkU2V0IHwgRXJyb3JTZXQgfCBFcnJvckxpc3RTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRl
PGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQg
U1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKlBhcmFtZXRlckJ1bmRs
ZSovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RG
TW92ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAg
ICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgUGFyYW1ldGVyQnVuZGxlOwotICAgIHB1Ymxp
YzoKLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5O
YW1lcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1l
c1NldCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIHZhbHVlKTsKLSAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhjb25zdCBTdHJp
bmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgdmFsdWUpOwotICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb3Rlc1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGltZXN0
YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdmFsdWUpOwotICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+KCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZh
bHVlcyIpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4o
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0
UGF5bG9hZChSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJv
cGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFs
dWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3NldCk7Ci0gICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiZXJyb3IiKSwgdmFsdWUp
OwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4oKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvckxpc3RTZXQ+JiBzZXRFcnJvckxpc3QoUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxpc3Q+IHZhbHVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JMaXN0U2V0
KSwgcHJvcGVydHlfZXJyb3JMaXN0X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImVycm9yTGlzdCIpLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPEVycm9yTGlzdFNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAg
IFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0g
c2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAg
ICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxQYXJhbWV0ZXJC
dW5kbGU+Kj4oJnJlc3VsdCkpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0gICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlc3Vs
dCA9IFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldENvbHVtbk5hbWVz
KC4uLikKLSAgICAgKiAgICAgLnNldE5vdGVzKC4uLikKLSAgICAgKiAgICAgLnNldFRpbWVzdGFt
cCguLi4pCi0gICAgICogICAgIC5zZXRWYWx1ZXMoLi4uKQotICAgICAqICAgICAuc2V0UGF5bG9h
ZCguLi4pCi0gICAgICogICAgIC5zZXRFcnJvciguLi4pCi0gICAgICogICAgIC5zZXRFcnJvckxp
c3QoLi4uKQotICAgICAqICAgICAucmVsZWFzZSgpOwotICAgICAqLwotICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLX07Ci0KLS8q
IENvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMgdG8g
Y2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4gKi8KLWNsYXNzIE9i
amVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLAotICAgICAgICBJbnRlZ2VyU2V0ID0gMSA8PCAwLAotICAgICAgICBBcnJheVNldCA9IDEg
PDwgMSwKLSAgICAgICAgU3RyaW5nU2V0ID0gMSA8PCAyLAotICAgICAgICBWYWx1ZVNldCA9IDEg
PDwgMywKLSAgICAgICAgT2JqZWN0U2V0ID0gMSA8PCA0LAotICAgICAgICBBbGxGaWVsZHNTZXQg
PSAoSW50ZWdlclNldCB8IEFycmF5U2V0IHwgU3RyaW5nU2V0IHwgVmFsdWVTZXQgfCBPYmplY3RT
ZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVy
IHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3Vs
dDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBj
YXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBC
dWlsZGVyKFJlZjwvKk9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMqL0luc3BlY3Rvck9i
amVjdD4mJiBvYmplY3QpCi0gICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkK
LSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNT
ZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZnJpZW5kIGNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM7Ci0gICAgcHVi
bGljOgotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJbnRlZ2VyU2V0PiYgc2V0SW50ZWdlcihj
b25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgSW50ZWdlclNldCksIHByb3BlcnR5X2ludGVnZXJfYWxyZWFkeV9zZXQpOwot
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImludGVnZXIiKSwg
dmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJbnRlZ2VyU2V0PigpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFycmF5U2V0PiYgc2V0QXJyYXkoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIEFycmF5U2V0KSwgcHJvcGVydHlfYXJyYXlfYWxyZWFkeV9zZXQpOwotICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImFycmF5IiksIHZhbHVlKTsK
LSAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QXJyYXlTZXQ+KCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBTdHJpbmdTZXQpLCBwcm9wZXJ0eV9zdHJpbmdfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInN0cmluZyIpLCB2YWx1ZSk7Ci0gICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0cmluZ1NldD4oKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZVNldD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFs
dWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1
ZVNldCksIHByb3BlcnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJ2YWx1ZSIpLCB2YWx1ZSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFZhbHVlU2V0PigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRl
cjxTVEFURSB8IE9iamVjdFNldD4mIHNldE9iamVjdChjb25zdCBTdHJpbmcmIHZhbHVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT2JqZWN0U2V0KSwg
cHJvcGVydHlfb2JqZWN0X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJvYmplY3QiKSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxPYmplY3RTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8T2JqZWN0
V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT2JqZWN0V2l0aFByb3Bl
cnR5TmFtZUNvbmZsaWN0cykgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0
KTsKLQotICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQu
cmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJl
dF9jYXN0PFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPio+KCZyZXN1bHQpKTsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKLSAgICAgKiBSZWY8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4gcmVzdWx0ID0g
T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNl
dEludGVnZXIoLi4uKQotICAgICAqICAgICAuc2V0QXJyYXkoLi4uKQotICAgICAqICAgICAuc2V0
U3RyaW5nKC4uLikKLSAgICAgKiAgICAgLnNldFZhbHVlKC4uLikKLSAgICAgKiAgICAgLnNldE9i
amVjdCguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRl
cjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQot
fSAvLyBEYXRhYmFzZQotCi1uYW1lc3BhY2UgVGVzdCB7Ci1jbGFzcyBQYXJhbWV0ZXJCdW5kbGUg
OiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBl
bnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotICAgICAgICBDb2x1bW5OYW1lc1NldCA9
IDEgPDwgMCwKLSAgICAgICAgTm90ZXNTZXQgPSAxIDw8IDEsCi0gICAgICAgIFRpbWVzdGFtcFNl
dCA9IDEgPDwgMiwKLSAgICAgICAgVmFsdWVzU2V0ID0gMSA8PCAzLAotICAgICAgICBQYXlsb2Fk
U2V0ID0gMSA8PCA0LAotICAgICAgICBFcnJvclNldCA9IDEgPDwgNSwKLSAgICAgICAgQWxsRmll
bGRzU2V0ID0gKENvbHVtbk5hbWVzU2V0IHwgTm90ZXNTZXQgfCBUaW1lc3RhbXBTZXQgfCBWYWx1
ZXNTZXQgfCBQYXlsb2FkU2V0IHwgRXJyb3JTZXQpCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyKFJlZjwvKlBhcmFtZXRlckJ1bmRsZSov
SW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92
ZShvYmplY3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAg
ICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgUGFyYW1ldGVyQnVuZGxlOwotICAgIHB1YmxpYzoK
LQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1l
cyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gdmFsdWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1Nl
dCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIHZhbHVlKTsKLSAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhjb25zdCBTdHJpbmcm
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
Tm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgdmFsdWUpOwotICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxOb3Rlc1NldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGltZXN0YW1w
U2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdmFsdWUpOwotICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxyZWFkeV9z
ZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVl
cyIpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4oKTsK
LSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5
bG9hZChSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVy
dHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUo
QVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8UGF5bG9hZFNldD4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6RXJyb3I+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3NldCk7Ci0gICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiZXJyb3IiKSwgdmFsdWUpOwot
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4oKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRs
ZSkgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAg
ICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwo
KTsKLSAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxQYXJh
bWV0ZXJCdW5kbGU+Kj4oJnJlc3VsdCkpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8qCi0g
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgotICAgICAqIFJlZjxQYXJhbWV0ZXJCdW5kbGU+
IHJlc3VsdCA9IFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnNldENvbHVt
bk5hbWVzKC4uLikKLSAgICAgKiAgICAgLnNldE5vdGVzKC4uLikKLSAgICAgKiAgICAgLnNldFRp
bWVzdGFtcCguLi4pCi0gICAgICogICAgIC5zZXRWYWx1ZXMoLi4uKQotICAgICAqICAgICAuc2V0
UGF5bG9hZCguLi4pCi0gICAgICogICAgIC5zZXRFcnJvciguLi4pCi0gICAgICogICAgIC5yZWxl
YXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotfTsKLQotfSAvLyBUZXN0Ci0KLQotCi19IC8vIG5hbWVz
cGFjZSBQcm90b2NvbAotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLSMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmpl
Y3RzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgotCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFByb3RvY29sIHsK
LQotCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgotCi0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi0KLQot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKLSNpbXBvcnQg
IlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24KLXsKLSAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwot
ICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBBU1NFUlQoY29udHJvbGxl
cik7Ci0gICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwotICAgIHJldHVybiBzZWxmOwotfQot
Ci0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLUBlbmQKLQot
Ci0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
VGVzdFByb3RvY29sLmg+Ci0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0Iikp
KQotQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKLUBlbmQK
LQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAotCi0jIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZp
Zy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotCi0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0K
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvclZhbHVlcy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLQot
Ci0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgotLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRp
b24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgot
Ci0KLUBjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yOwotQGNsYXNzIFRlc3RQcm90b2Nv
bERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU7Ci1AY2xhc3MgVGVzdFByb3RvY29sRGF0
YWJhc2VQYXJhbWV0ZXJCdW5kbGU7Ci1AY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RX
aXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOwotQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRHVt
bXlPYmplY3Q7Ci1AY2xhc3MgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZTsKLQotCi0K
LQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilw
YXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6
KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKLS8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKLS8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOwotQGVuZAotCi1fX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKLUBpbnRlcmZhY2UgVGVzdFByb3RvY29s
RGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSA6IFJXSVByb3RvY29sSlNPTk9iamVjdAot
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICos
IGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXM7Ci0v
KiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm5vdGVz
OwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIHRp
bWVzdGFtcDsKLS8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzOwotLyogb3B0aW9uYWwgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkOwotLyogb3B0
aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciAqZXJyb3I7Ci0vKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29w
eSkgTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKmVycm9yTGlzdDsKLUBl
bmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNl
IFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVuZGxlIDogUldJUHJvdG9jb2xKU09OT2Jq
ZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0tIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90
ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKXBheWxvYWQgZXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvciBl
cnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JM
aXN0OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXM7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgY29weSkgTlNTdHJpbmcgKm5vdGVzOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIHRpbWVzdGFtcDsKLS8qIHJlcXVpcmVkICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVz
OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICpwYXlsb2FkOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIHJldGFpbikgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqZXJyb3I7Ci0vKiByZXF1aXJl
ZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3I+Ki8gKmVycm9yTGlzdDsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJp
bGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNlT2JqZWN0
V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyA6IFJXSVByb3RvY29sSlNPTk9iamVjdAotLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAq
KXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2Nv
bEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSW50ZWdl
cjooTlNTdHJpbmcgKilpbnRlZ2VyIGFycmF5OihOU1N0cmluZyAqKWFycmF5IHN0cmluZzooTlNT
dHJpbmcgKilzdHJpbmcgdmFsdWU6KE5TU3RyaW5nICopdmFsdWUgb2JqZWN0OihOU1N0cmluZyAq
KW9iamVjdDsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0
cmluZyAqaW50ZWdlcjsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5
KSBOU1N0cmluZyAqYXJyYXk7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywg
Y29weSkgTlNTdHJpbmcgKnN0cmluZzsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBjb3B5KSBOU1N0cmluZyAqdmFsdWU7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5v
bmF0b21pYywgY29weSkgTlNTdHJpbmcgKm9iamVjdDsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbERhdGFiYXNl
RHVtbXlPYmplY3QgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
anNvbk9iamVjdDsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUgOiBSV0lQcm90
b2NvbEpTT05PYmplY3QKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlv
bmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRo
SlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1
bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3Rh
bXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciAqKWVycm9yOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXM7Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVy
dHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKm5vdGVzOwotLyogcmVxdWlyZWQgKi8gQHBy
b3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgZG91YmxlIHRpbWVzdGFtcDsKLS8qIHJlcXVpcmVk
ICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
dmFsdWVzOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkOwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqZXJyb3I7Ci1AZW5k
Ci0KLQotCi0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCi0KLSMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCi0vLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgotI2lt
cG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKLSNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLQotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sSW50ZXJuYWwuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3Iv
UldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+Ci1PYmpDRW51bVR5cGUgZnJvbVByb3Rv
Y29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOwotCi0KLQotCi0KLX0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
Ci0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBl
Lmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9y
dCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLQot
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2Vy
LmgiCi0jaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
PgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRXJyb3I6
KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3I+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0rICh2
b2lkKV9wYXJzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xEYXRhYmFzZU9w
dGlvbmFsUGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OwotKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFy
YW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwotKyAodm9p
ZClfcGFyc2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOihUZXN0UHJvdG9jb2xEYXRh
YmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZUR1bW15T2JqZWN0OihUZXN0UHJvdG9jb2xE
YXRhYmFzZUR1bW15T2JqZWN0ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwot
Ci1AZW5kCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFp
bikKLQotKyAodm9pZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbFRlc3RQYXJh
bWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7Ci0KLUBlbmQK
LQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoRGF0YWJhc2VE
b21haW4pCi0KLSsgKHZvaWQpX3BhcnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0
VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9h
ZDpwYXlsb2FkXTsKLX0KLQotKyAodm9pZClfcGFyc2VFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJh
eS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUg
PSAoTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKilwYXlsb2FkOwotfQot
Ci0rICh2b2lkKV9wYXJzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xEYXRh
YmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNE
aWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFz
ZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07
Ci19Ci0KLSsgKHZvaWQpX3BhcnNlUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xEYXRhYmFz
ZVBhcmFtZXRlckJ1bmRsZSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBj
bGFzc10pOwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJC
dW5kbGUgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKLX0KLQotKyAodm9pZClfcGFy
c2VPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOihUZXN0UHJvdG9jb2xEYXRhYmFzZU9i
amVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQKLXsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U0RpY3Rpb25hcnkgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFi
YXNlT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyBhbGxvY10gaW5pdFdpdGhQYXlsb2Fk
OnBheWxvYWRdOwotfQotCi0rICh2b2lkKV9wYXJzZUR1bW15T2JqZWN0OihUZXN0UHJvdG9jb2xE
YXRhYmFzZUR1bW15T2JqZWN0ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5
IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUR1bW15T2Jq
ZWN0IGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLUBpbXBsZW1l
bnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFRlc3REb21haW4pCi0KLSsgKHZv
aWQpX3BhcnNlUGFyYW1ldGVyQnVuZGxlOihUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxl
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91
dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlIGFsbG9jXSBpbml0V2l0
aFBheWxvYWQ6cGF5bG9hZF07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LW9iamVjdC10eXBlLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKLSNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0jaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7Ci0KLQotQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoo
bm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAgIGlm
ICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBA
Im1lc3NhZ2UiKTsKLSAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOwotCi0g
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJd
LCBAImNvZGUiKTsKLSAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFs
dWVdOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09O
T2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Ci17Ci0gICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0luc3Bl
Y3Rvck9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1l
c3NhZ2UgY29kZTooaW50KWNvZGUKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7Ci0KLSAgICBzZWxmLm1lc3NhZ2UgPSBtZXNz
YWdlOwotICAgIHNlbGYuY29kZSA9IGNvZGU7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
dm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBbc3VwZXIgc2V0U3Ry
aW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOwotfQotCi0tIChOU1N0cmluZyAqKW1lc3Nh
Z2UKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKLX0KLQot
LSAodm9pZClzZXRDb2RlOihpbnQpY29kZQotewotICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUg
Zm9yS2V5OkAiY29kZSJdOwotfQotCi0tIChpbnQpY29kZQotewotICAgIHJldHVybiBbc3VwZXIg
aW50ZWdlckZvcktleTpAImNvZGUiXTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sRGF0YWJhc2VPcHRpb25hbFBhcmFtZXRlckJ1bmRsZQotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4g
KilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0KLSAgICBzZWxmLmNvbHVtbk5hbWVzID0gb2JqY0FycmF5RnJvbVBheWxvYWQ8
TlNTdHJpbmc+KHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdKTsKLQotICAgIHNlbGYubm90ZXMgPSBw
YXlsb2FkW0Aibm90ZXMiXTsKLQotICAgIHNlbGYudGltZXN0YW1wID0gW3BheWxvYWRbQCJ0aW1l
c3RhbXAiXSBkb3VibGVWYWx1ZV07Ci0KLSAgICBzZWxmLnZhbHVlcyA9IHBheWxvYWRbQCJ2YWx1
ZXMiXTsKLQotICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWRbQCJwYXlsb2FkIl07Ci0KLSAgICBz
ZWxmLmVycm9yID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aFBh
eWxvYWQ6cGF5bG9hZFtAImVycm9yIl1dOwotCi0gICAgc2VsZi5lcnJvckxpc3QgPSBvYmpjQXJy
YXlGcm9tUGF5bG9hZDxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPihwYXlsb2FkW0AiZXJyb3JM
aXN0Il0pOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhK
U09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Ci17Ci0gICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0lu
c3BlY3Rvck9iamVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVy
biBzZWxmOwotfQotCi0tICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKiljb2x1bW5OYW1lcwotewotICAgIFtzdXBlciBzZXRJbnNwZWN0b3JBcnJheTppbnNwZWN0
b3JTdHJpbmdBcnJheShjb2x1bW5OYW1lcykgZm9yS2V5OkAiY29sdW1uTmFtZXMiXTsKLX0KLQot
LSAoTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKLXsKLSAgICByZXR1cm4gb2Jq
Y1N0cmluZ0FycmF5KFtzdXBlciBpbnNwZWN0b3JBcnJheUZvcktleTpAImNvbHVtbk5hbWVzIl0p
OwotfQotCi0tICh2b2lkKXNldE5vdGVzOihOU1N0cmluZyAqKW5vdGVzCi17Ci0gICAgW3N1cGVy
IHNldFN0cmluZzpub3RlcyBmb3JLZXk6QCJub3RlcyJdOwotfQotCi0tIChOU1N0cmluZyAqKW5v
dGVzCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJub3RlcyJdOwotfQotCi0t
ICh2b2lkKXNldFRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcAotewotICAgIFtzdXBlciBzZXRE
b3VibGU6dGltZXN0YW1wIGZvcktleTpAInRpbWVzdGFtcCJdOwotfQotCi0tIChkb3VibGUpdGlt
ZXN0YW1wCi17Ci0gICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0aW1lc3RhbXAiXTsK
LX0KLQotLSAodm9pZClzZXRWYWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcwot
ewotICAgIFtzdXBlciBzZXRPYmplY3Q6dmFsdWVzIGZvcktleTpAInZhbHVlcyJdOwotfQotCi0t
IChSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMKLXsKLSAgICByZXR1cm4gW1tSV0lQcm90
b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltbc3VwZXIgb2Jq
ZWN0Rm9yS2V5OkAidmFsdWVzIl0gdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXTsKLX0KLQotLSAo
dm9pZClzZXRQYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCi17Ci0gICAg
W3N1cGVyIHNldE9iamVjdDpwYXlsb2FkIGZvcktleTpAInBheWxvYWQiXTsKLX0KLQotLSAoUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAotewotICAgIHJldHVybiBbW1JXSVByb3RvY29s
SlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W1tzdXBlciBvYmplY3RG
b3JLZXk6QCJwYXlsb2FkIl0gdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXTsKLX0KLQotLSAodm9p
ZClzZXRFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17Ci0gICAgW3N1
cGVyIHNldE9iamVjdDplcnJvciBmb3JLZXk6QCJlcnJvciJdOwotfQotCi0tIChUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICopZXJyb3IKLXsKLSAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbW3N1cGVyIG9iamVjdEZv
cktleTpAImVycm9yIl0gdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXTsKLX0KLQotLSAodm9pZClz
ZXRFcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJy
b3JMaXN0Ci17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9BUlJBWShlcnJv
ckxpc3QsIFtUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGNsYXNzXSk7Ci0gICAgW3N1cGVyIHNl
dEluc3BlY3RvckFycmF5Omluc3BlY3Rvck9iamVjdEFycmF5KGVycm9yTGlzdCkgZm9yS2V5OkAi
ZXJyb3JMaXN0Il07Ci19Ci0KLS0gKE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
PiovICopZXJyb3JMaXN0Ci17Ci0gICAgcmV0dXJuIG9iamNBcnJheTxUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yPihbc3VwZXIgaW5zcGVjdG9yQXJyYXlGb3JLZXk6QCJlcnJvckxpc3QiXSk7Ci19
Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVy
QnVuZGxlCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0
aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvbHVtbk5hbWVzIl0sIEAiY29sdW1uTmFt
ZXMiKTsKLSAgICBzZWxmLmNvbHVtbk5hbWVzID0gb2JqY0FycmF5RnJvbVBheWxvYWQ8TlNTdHJp
bmc+KHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdKTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm5vdGVzIl0sIEAibm90ZXMiKTsKLSAgICBzZWxm
Lm5vdGVzID0gcGF5bG9hZFtAIm5vdGVzIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0aW1lc3RhbXAiXSwgQCJ0aW1lc3RhbXAiKTsKLSAg
ICBzZWxmLnRpbWVzdGFtcCA9IFtwYXlsb2FkW0AidGltZXN0YW1wIl0gZG91YmxlVmFsdWVdOwot
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidmFs
dWVzIl0sIEAidmFsdWVzIik7Ci0gICAgc2VsZi52YWx1ZXMgPSBwYXlsb2FkW0AidmFsdWVzIl07
Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJw
YXlsb2FkIl0sIEAicGF5bG9hZCIpOwotICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWRbQCJwYXls
b2FkIl07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxv
YWRbQCJlcnJvciJdLCBAImVycm9yIik7Ci0gICAgc2VsZi5lcnJvciA9IFtbVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJlcnJvciJdXTsK
LQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImVy
cm9yTGlzdCJdLCBAImVycm9yTGlzdCIpOwotICAgIHNlbGYuZXJyb3JMaXN0ID0gb2JqY0FycmF5
RnJvbVBheWxvYWQ8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4ocGF5bG9hZFtAImVycm9yTGlz
dCJdKTsKLQotICAgIHJldHVybiBzZWxmOwotfQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNP
Tk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdAotewotICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W2pzb25PYmplY3QgdG9JbnNw
ZWN0b3JPYmplY3RdLmdldCgpXSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVz
dGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZh
bHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIGVycm9yOihUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IgZXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVycm9yTGlzdAotewotICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobm90ZXMsIEAibm90ZXMiKTsK
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHZhbHVlcywgQCJ2YWx1
ZXMiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWQs
IEAicGF5bG9hZCIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFko
ZXJyb3IsIEAiZXJyb3IiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BF
UlRZKGVycm9yTGlzdCwgQCJlcnJvckxpc3QiKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFX0lOX0FSUkFZKGVycm9yTGlzdCwgW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgY2xh
c3NdKTsKLQotICAgIHNlbGYuY29sdW1uTmFtZXMgPSBjb2x1bW5OYW1lczsKLSAgICBzZWxmLm5v
dGVzID0gbm90ZXM7Ci0gICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0gICAgc2VsZi52
YWx1ZXMgPSB2YWx1ZXM7Ci0gICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZDsKLSAgICBzZWxmLmVy
cm9yID0gZXJyb3I7Ci0gICAgc2VsZi5lcnJvckxpc3QgPSBlcnJvckxpc3Q7Ci0KLSAgICByZXR1
cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5n
PiovICopY29sdW1uTmFtZXMKLXsKLSAgICBbc3VwZXIgc2V0SW5zcGVjdG9yQXJyYXk6aW5zcGVj
dG9yU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpIGZvcktleTpAImNvbHVtbk5hbWVzIl07Ci19Ci0K
LS0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCi17Ci0gICAgcmV0dXJuIG9i
amNTdHJpbmdBcnJheShbc3VwZXIgaW5zcGVjdG9yQXJyYXlGb3JLZXk6QCJjb2x1bW5OYW1lcyJd
KTsKLX0KLQotLSAodm9pZClzZXROb3RlczooTlNTdHJpbmcgKilub3RlcwotewotICAgIFtzdXBl
ciBzZXRTdHJpbmc6bm90ZXMgZm9yS2V5OkAibm90ZXMiXTsKLX0KLQotLSAoTlNTdHJpbmcgKilu
b3RlcwotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibm90ZXMiXTsKLX0KLQot
LSAodm9pZClzZXRUaW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAKLXsKLSAgICBbc3VwZXIgc2V0
RG91YmxlOnRpbWVzdGFtcCBmb3JLZXk6QCJ0aW1lc3RhbXAiXTsKLX0KLQotLSAoZG91YmxlKXRp
bWVzdGFtcAotewotICAgIHJldHVybiBbc3VwZXIgZG91YmxlRm9yS2V5OkAidGltZXN0YW1wIl07
Ci19Ci0KLS0gKHZvaWQpc2V0VmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMK
LXsKLSAgICBbc3VwZXIgc2V0T2JqZWN0OnZhbHVlcyBmb3JLZXk6QCJ2YWx1ZXMiXTsKLX0KLQot
LSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCi17Ci0gICAgcmV0dXJuIFtbUldJUHJv
dG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbW3N1cGVyIG9i
amVjdEZvcktleTpAInZhbHVlcyJdIHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV07Ci19Ci0KLS0g
KHZvaWQpc2V0UGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZAotewotICAg
IFtzdXBlciBzZXRPYmplY3Q6cGF5bG9hZCBmb3JLZXk6QCJwYXlsb2FkIl07Ci19Ci0KLS0gKFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKLXsKLSAgICByZXR1cm4gW1tSV0lQcm90b2Nv
bEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltbc3VwZXIgb2JqZWN0
Rm9yS2V5OkAicGF5bG9hZCJdIHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZv
aWQpc2V0RXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgotewotICAgIFtz
dXBlciBzZXRPYmplY3Q6ZXJyb3IgZm9yS2V5OkAiZXJyb3IiXTsKLX0KLQotLSAoVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17Ci0gICAgcmV0dXJuIFtbVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W1tzdXBlciBvYmplY3RG
b3JLZXk6QCJlcnJvciJdIHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV07Ci19Ci0KLS0gKHZvaWQp
c2V0RXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKWVy
cm9yTGlzdAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoZXJy
b3JMaXN0LCBbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBjbGFzc10pOwotICAgIFtzdXBlciBz
ZXRJbnNwZWN0b3JBcnJheTppbnNwZWN0b3JPYmplY3RBcnJheShlcnJvckxpc3QpIGZvcktleTpA
ImVycm9yTGlzdCJdOwotfQotCi0tIChOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
cj4qLyAqKWVycm9yTGlzdAotewotICAgIHJldHVybiBvYmpjQXJyYXk8VGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvcj4oW3N1cGVyIGluc3BlY3RvckFycmF5Rm9yS2V5OkAiZXJyb3JMaXN0Il0pOwot
fQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdp
dGhQcm9wZXJ0eU5hbWVDb25mbGljdHMKLQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9h
ZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAotewotICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiaW50ZWdlciJd
LCBAImludGVnZXIiKTsKLSAgICBzZWxmLmludGVnZXIgPSBwYXlsb2FkW0AiaW50ZWdlciJdOwot
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiYXJy
YXkiXSwgQCJhcnJheSIpOwotICAgIHNlbGYuYXJyYXkgPSBwYXlsb2FkW0AiYXJyYXkiXTsKLQot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInN0cmlu
ZyJdLCBAInN0cmluZyIpOwotICAgIHNlbGYuc3RyaW5nID0gcGF5bG9hZFtAInN0cmluZyJdOwot
Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidmFs
dWUiXSwgQCJ2YWx1ZSIpOwotICAgIHNlbGYudmFsdWUgPSBwYXlsb2FkW0AidmFsdWUiXTsKLQot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm9iamVj
dCJdLCBAIm9iamVjdCIpOwotICAgIHNlbGYub2JqZWN0ID0gcGF5bG9hZFtAIm9iamVjdCJdOwot
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0
OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Ci17Ci0gICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rvck9i
amVjdF0uZ2V0KCldKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBzZWxmOwot
fQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJbnRlZ2VyOihOU1N0cmluZyAqKWludGVnZXIg
YXJyYXk6KE5TU3RyaW5nICopYXJyYXkgc3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyB2YWx1ZToo
TlNTdHJpbmcgKil2YWx1ZSBvYmplY3Q6KE5TU3RyaW5nICopb2JqZWN0Ci17Ci0gICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGludGVnZXIsIEAiaW50ZWdlciIpOwotICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoYXJyYXksIEAiYXJyYXkiKTsK
LSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHN0cmluZywgQCJzdHJp
bmciKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHZhbHVlLCBA
InZhbHVlIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShvYmpl
Y3QsIEAib2JqZWN0Iik7Ci0KLSAgICBzZWxmLmludGVnZXIgPSBpbnRlZ2VyOwotICAgIHNlbGYu
YXJyYXkgPSBhcnJheTsKLSAgICBzZWxmLnN0cmluZyA9IHN0cmluZzsKLSAgICBzZWxmLnZhbHVl
ID0gdmFsdWU7Ci0gICAgc2VsZi5vYmplY3QgPSBvYmplY3Q7Ci0KLSAgICByZXR1cm4gc2VsZjsK
LX0KLQotLSAodm9pZClzZXRJbnRlZ2VyOihOU1N0cmluZyAqKWludGVnZXIKLXsKLSAgICBbc3Vw
ZXIgc2V0U3RyaW5nOmludGVnZXIgZm9yS2V5OkAiaW50ZWdlciJdOwotfQotCi0tIChOU1N0cmlu
ZyAqKWludGVnZXIKLXsKLSAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAImludGVnZXIi
XTsKLX0KLQotLSAodm9pZClzZXRBcnJheTooTlNTdHJpbmcgKilhcnJheQotewotICAgIFtzdXBl
ciBzZXRTdHJpbmc6YXJyYXkgZm9yS2V5OkAiYXJyYXkiXTsKLX0KLQotLSAoTlNTdHJpbmcgKilh
cnJheQotewotICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAiYXJyYXkiXTsKLX0KLQot
LSAodm9pZClzZXRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgW3N1cGVyIHNldFN0
cmluZzpzdHJpbmcgZm9yS2V5OkAic3RyaW5nIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopc3RyaW5n
Ci17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJzdHJpbmciXTsKLX0KLQotLSAo
dm9pZClzZXRWYWx1ZTooTlNTdHJpbmcgKil2YWx1ZQotewotICAgIFtzdXBlciBzZXRTdHJpbmc6
dmFsdWUgZm9yS2V5OkAidmFsdWUiXTsKLX0KLQotLSAoTlNTdHJpbmcgKil2YWx1ZQotewotICAg
IHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAidmFsdWUiXTsKLX0KLQotLSAodm9pZClzZXRP
YmplY3Q6KE5TU3RyaW5nICopb2JqZWN0Ci17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpvYmplY3Qg
Zm9yS2V5OkAib2JqZWN0Il07Ci19Ci0KLS0gKE5TU3RyaW5nICopb2JqZWN0Ci17Ci0gICAgcmV0
dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJvYmplY3QiXTsKLX0KLQotQGVuZAotCi1AaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdAotCi0tIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4g
KilwYXlsb2FkCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3QKLXsKLSAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltqc29uT2JqZWN0IHRv
SW5zcGVjdG9yT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLUBlbmQKLQotCi1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVGVz
dFBhcmFtZXRlckJ1bmRsZQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25u
dWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCi17Ci0gICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdLCBA
ImNvbHVtbk5hbWVzIik7Ci0gICAgc2VsZi5jb2x1bW5OYW1lcyA9IG9iamNBcnJheUZyb21QYXls
b2FkPE5TU3RyaW5nPihwYXlsb2FkW0AiY29sdW1uTmFtZXMiXSk7Ci0KLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJub3RlcyJdLCBAIm5vdGVzIik7
Ci0gICAgc2VsZi5ub3RlcyA9IHBheWxvYWRbQCJub3RlcyJdOwotCi0gICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidGltZXN0YW1wIl0sIEAidGltZXN0
YW1wIik7Ci0gICAgc2VsZi50aW1lc3RhbXAgPSBbcGF5bG9hZFtAInRpbWVzdGFtcCJdIGRvdWJs
ZVZhbHVlXTsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5
bG9hZFtAInZhbHVlcyJdLCBAInZhbHVlcyIpOwotICAgIHNlbGYudmFsdWVzID0gcGF5bG9hZFtA
InZhbHVlcyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShw
YXlsb2FkW0AicGF5bG9hZCJdLCBAInBheWxvYWQiKTsKLSAgICBzZWxmLnBheWxvYWQgPSBwYXls
b2FkW0AicGF5bG9hZCJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0AiZXJyb3IiXSwgQCJlcnJvciIpOwotICAgIHNlbGYuZXJyb3IgPSBbW1Rl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0Ai
ZXJyb3IiXV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3QKLXsKLSAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltqc29uT2JqZWN0IHRv
SW5zcGVjdG9yT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbHVtbk5hbWVzOihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0
aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBlcnJvcjoo
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShub3RlcywgQCJub3RlcyIpOwot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkodmFsdWVzLCBAInZhbHVl
cyIpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZCwg
QCJwYXlsb2FkIik7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShl
cnJvciwgQCJlcnJvciIpOwotCi0gICAgc2VsZi5jb2x1bW5OYW1lcyA9IGNvbHVtbk5hbWVzOwot
ICAgIHNlbGYubm90ZXMgPSBub3RlczsKLSAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsK
LSAgICBzZWxmLnZhbHVlcyA9IHZhbHVlczsKLSAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkOwot
ICAgIHNlbGYuZXJyb3IgPSBlcnJvcjsKLQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lk
KXNldENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcwotewot
ICAgIFtzdXBlciBzZXRJbnNwZWN0b3JBcnJheTppbnNwZWN0b3JTdHJpbmdBcnJheShjb2x1bW5O
YW1lcykgZm9yS2V5OkAiY29sdW1uTmFtZXMiXTsKLX0KLQotLSAoTlNBcnJheS8qPE5TU3RyaW5n
PiovICopY29sdW1uTmFtZXMKLXsKLSAgICByZXR1cm4gb2JqY1N0cmluZ0FycmF5KFtzdXBlciBp
bnNwZWN0b3JBcnJheUZvcktleTpAImNvbHVtbk5hbWVzIl0pOwotfQotCi0tICh2b2lkKXNldE5v
dGVzOihOU1N0cmluZyAqKW5vdGVzCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpub3RlcyBmb3JL
ZXk6QCJub3RlcyJdOwotfQotCi0tIChOU1N0cmluZyAqKW5vdGVzCi17Ci0gICAgcmV0dXJuIFtz
dXBlciBzdHJpbmdGb3JLZXk6QCJub3RlcyJdOwotfQotCi0tICh2b2lkKXNldFRpbWVzdGFtcDoo
ZG91YmxlKXRpbWVzdGFtcAotewotICAgIFtzdXBlciBzZXREb3VibGU6dGltZXN0YW1wIGZvcktl
eTpAInRpbWVzdGFtcCJdOwotfQotCi0tIChkb3VibGUpdGltZXN0YW1wCi17Ci0gICAgcmV0dXJu
IFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0aW1lc3RhbXAiXTsKLX0KLQotLSAodm9pZClzZXRWYWx1
ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcwotewotICAgIFtzdXBlciBzZXRPYmpl
Y3Q6dmFsdWVzIGZvcktleTpAInZhbHVlcyJdOwotfQotCi0tIChSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKil2YWx1ZXMKLXsKLSAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2Nd
IGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAidmFsdWVzIl0g
dG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXTsKLX0KLQotLSAodm9pZClzZXRQYXlsb2FkOihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCi17Ci0gICAgW3N1cGVyIHNldE9iamVjdDpwYXls
b2FkIGZvcktleTpAInBheWxvYWQiXTsKLX0KLQotLSAoUldJUHJvdG9jb2xKU09OT2JqZWN0ICop
cGF5bG9hZAotewotICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5p
dFdpdGhJbnNwZWN0b3JPYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJwYXlsb2FkIl0gdG9J
bnNwZWN0b3JPYmplY3RdLmdldCgpXTsKLX0KLQotLSAodm9pZClzZXRFcnJvcjooVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqKWVycm9yCi17Ci0gICAgW3N1cGVyIHNldE9iamVjdDplcnJvciBm
b3JLZXk6QCJlcnJvciJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJy
b3IKLXsKLSAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0
V2l0aEluc3BlY3Rvck9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9yIl0gdG9JbnNw
ZWN0b3JPYmplY3RdLmdldCgpXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxZmQyYWM4MWQ1ZWNmNGVkNjdkNjFkYzlkMDEyNGY4
ZGI0MmI1OTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5
cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAt
MSwxNTg4ICswLDAgQEAKLSMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMu
anMKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50
aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
LQotLy8gVGVzdC4KLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUZXN0LlVuY2FzdGVk
QW5pbWFscyIsIHtQaWdzOiAiUGlncyIsIENvd3M6ICJDb3dzIiwgQ2F0czogIkNhdHMiLCBIZW5z
OiAiSGVucyJ9KTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUZXN0LkNhc3RlZEFu
aW1hbHMiLCB7RHVja3M6ICJEdWNrcyIsIEhlbnM6ICJIZW5zIiwgQ3Jvd3M6ICJDcm93cyIsIEZs
YW1pbmdvczogIkZsYW1pbmdvcyJ9KTsKLSMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1y
dW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCi0jaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7
Ci0KLWNsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKLXB1YmxpYzoKLSAgICB2b2lk
IHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRj
aGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9Ci0gICAg
QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQotcHJpdmF0ZToKLSAgICBSZWZQdHI8QmFja2VuZERp
c3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci19OwotCi0KLQotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQotIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgot
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKLSNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmlu
Zy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKLQotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLSNpbmNsdWRlICJUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIEluc3BlY3Rv
ciB7Ci0KLQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotIyMjIEVuZCBGaWxlOiBUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmNwcAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWly
aW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1jbGFzcyBGcm9u
dGVuZFJvdXRlcjsKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0jIyMgRW5kIEZpbGU6IFRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVx
dWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kUm91dGVyLmgiCi0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNh
c3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
PgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci0KLQotbmFtZXNwYWNlIFByb3RvY29sIHsKLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1u
YW1lc3BhY2UgVGVzdCB7Ci1jbGFzcyBUeXBlTmVlZGluZ0Nhc3Q7Ci1jbGFzcyBSZWN1cnNpdmVP
YmplY3QxOwotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MjsKLWVudW0gY2xhc3MgVW5jYXN0ZWRBbmlt
YWxzOwotZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzOwotfSAvLyBUZXN0Ci0vLyBFbmQgb2YgZm9y
d2FyZCBkZWNsYXJhdGlvbnMuCi0KLQotLy8gVHlwZWRlZnMuCi1uYW1lc3BhY2UgVGVzdCB7Ci10
eXBlZGVmIGludCBDYXN0ZWRPYmplY3RJZDsKLXR5cGVkZWYgaW50IFVuY2FzdGVkT2JqZWN0SWQ7
Ci19IC8vIFRlc3QKLS8vIEVuZCBvZiB0eXBlZGVmcy4KLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJz
IHsKLQotU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQotewot
ICAgIHJldHVybiBnZXRFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1
ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi1uYW1lc3BhY2UgVGVzdCB7
Ci0vKiBBIGR1bW15IHR5cGUgdGhhdCByZXF1aXJlcyBydW50aW1lIGNhc3RzLCBhbmQgZm9yY2Vz
IG5vbi1wcmltaXRpdmUgcmVmZXJlbmNlZCB0eXBlcyB0byBhbHNvIGVtaXQgcnVudGltZSBjYXN0
IGhlbHBlcnMuICovCi1jbGFzcyBUeXBlTmVlZGluZ0Nhc3QgOiBwdWJsaWMgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3RCYXNlIHsKLXB1YmxpYzoKLSAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLAotICAgICAgICBTdHJpbmdTZXQgPSAxIDw8IDAsCi0gICAgICAgIE51bWJlclNl
dCA9IDEgPDwgMSwKLSAgICAgICAgQW5pbWFsc1NldCA9IDEgPDwgMiwKLSAgICAgICAgSWRTZXQg
PSAxIDw8IDMsCi0gICAgICAgIFRyZWVTZXQgPSAxIDw8IDQsCi0gICAgICAgIEFsbEZpZWxkc1Nl
dCA9IChTdHJpbmdTZXQgfCBOdW1iZXJTZXQgfCBBbmltYWxzU2V0IHwgSWRTZXQgfCBUcmVlU2V0
KQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7
Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVp
bGRlcihSZWY8LypUeXBlTmVlZGluZ0Nhc3QqL0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCi0g
ICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKLSAgICAgICAgewotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRl
ZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJpZW5kIGNsYXNzIFR5
cGVOZWVkaW5nQ2FzdDsKLSAgICBwdWJsaWM6Ci0KLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0
cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RyaW5nU2V0KSwgcHJvcGVydHlfc3Ry
aW5nX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJzdHJpbmciKSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxT
dHJpbmdTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTnVtYmVy
U2V0PiYgc2V0TnVtYmVyKGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE51bWJlclNldCksIHByb3BlcnR5X251bWJlcl9hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoIm51bWJl
ciIpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE51bWJlclNldD4oKTsK
LSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBbmltYWxzU2V0PiYgc2V0QW5p
bWFscyhJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzIHZhbHVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQW5pbWFsc1NldCks
IHByb3BlcnR5X2FuaW1hbHNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZyhBU0NJSUxpdGVyYWwoImFuaW1hbHMiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPEFuaW1hbHNTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgSWRTZXQ+JiBzZXRJZChpbnQgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJZFNldCksIHByb3BlcnR5X2lkX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiaWQiKSwg
dmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJZFNldD4oKTsKLSAgICAgICAg
fQotCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUcmVlU2V0PiYgc2V0VHJlZShSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUcmVlU2V0KSwgcHJvcGVy
dHlfdHJlZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgidHJlZSIpLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFRyZWVTZXQ+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWY8VHlwZU5lZWRpbmdDYXN0PiBy
ZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZihUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3Qp
LCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgICAgICByZXR1cm4gV1RGTW92
ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8VHlwZU5lZWRpbmdDYXN0Pio+KCZyZXN1bHQpKTsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
LSAgICAgKiBSZWY8VHlwZU5lZWRpbmdDYXN0PiByZXN1bHQgPSBUeXBlTmVlZGluZ0Nhc3Q6OmNy
ZWF0ZSgpCi0gICAgICogICAgIC5zZXRTdHJpbmcoLi4uKQotICAgICAqICAgICAuc2V0TnVtYmVy
KC4uLikKLSAgICAgKiAgICAgLnNldEFuaW1hbHMoLi4uKQotICAgICAqICAgICAuc2V0SWQoLi4u
KQotICAgICAqICAgICAuc2V0VHJlZSguLi4pCi0gICAgICogICAgIC5yZWxlYXNlKCk7Ci0gICAg
ICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KSk7Ci0gICAgfQotfTsKLQotLyogICovCi1lbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFscyB7Ci0g
ICAgUGlncyA9IDQsCi0gICAgQ293cyA9IDUsCi0gICAgQ2F0cyA9IDYsCi0gICAgSGVucyA9IDEs
Ci19OyAvLyBlbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFscwotLyogICovCi1lbnVtIGNsYXNzIENh
c3RlZEFuaW1hbHMgewotICAgIER1Y2tzID0gMCwKLSAgICBIZW5zID0gMSwKLSAgICBDcm93cyA9
IDIsCi0gICAgRmxhbWluZ29zID0gMywKLX07IC8vIGVudW0gY2xhc3MgQ2FzdGVkQW5pbWFscwot
Y2xhc3MgUmVjdXJzaXZlT2JqZWN0MSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dEJhc2UgewotcHVibGljOgotICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0g
ICAgICAgIEFsbEZpZWxkc1NldCA9IDAKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRF
PgotICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qUmVjdXJzaXZlT2JqZWN0MSovSW5zcGVj
dG9yT2JqZWN0PiYmIG9iamVjdCkKLSAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmpl
Y3QpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgfQot
ICAgICAgICBmcmllbmQgY2xhc3MgUmVjdXJzaXZlT2JqZWN0MTsKLSAgICBwdWJsaWM6Ci0KLSAg
ICAgICAgUmVmPFJlY3Vyc2l2ZU9iamVjdDE+IHJlbGVhc2UoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVj
dDEpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICAgICAg
ICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxs
KCk7Ci0gICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UmVj
dXJzaXZlT2JqZWN0MT4qPigmcmVzdWx0KSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoK
LSAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ci0gICAgICogUmVmPFJlY3Vyc2l2ZU9iamVj
dDE+IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVjdDE6OmNyZWF0ZSgpCi0gICAgICogICAgIC5yZWxl
YXNlKCk7Ci0gICAgICovCi0gICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRPYmooUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHZhbHVlKQotICAgIHsKLSAgICAg
ICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgib2JqIiksIFdU
Rk1vdmUodmFsdWUpKTsKLSAgICB9Ci19OwotCi1jbGFzcyBSZWN1cnNpdmVPYmplY3QyIDogcHVi
bGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSB7
Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSAgICAgICAgQWxsRmllbGRzU2V0ID0gMAotICAg
IH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAg
cHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAg
ICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihS
ZWY8LypSZWN1cnNpdmVPYmplY3QyKi9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQotICAgICAg
ICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBSZWN1cnNp
dmVPYmplY3QyOwotICAgIHB1YmxpYzoKLQotICAgICAgICBSZWY8UmVjdXJzaXZlT2JqZWN0Mj4g
cmVsZWFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MikgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVj
dCksIGNhbm5vdF9jYXN0KTsKLQotICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKLSAgICAgICAgICAgIHJldHVybiBXVEZN
b3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxSZWN1cnNpdmVPYmplY3QyPio+KCZyZXN1bHQpKTsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvKgotICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKLSAgICAgKiBSZWY8UmVjdXJzaXZlT2JqZWN0Mj4gcmVzdWx0ID0gUmVjdXJzaXZlT2JqZWN0
Mjo6Y3JlYXRlKCkKLSAgICAgKiAgICAgLnJlbGVhc2UoKTsKLSAgICAgKi8KLSAgICBzdGF0aWMg
QnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZl
T2JqZWN0MT4gdmFsdWUpCi0gICAgewotICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRP
YmplY3QoQVNDSUlMaXRlcmFsKCJvYmoiKSwgV1RGTW92ZSh2YWx1ZSkpOwotICAgIH0KLX07Ci0K
LX0gLy8gVGVzdAotCi10ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi1z
dGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlKik7Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAotfTsKLXRlbXBsYXRlPD4gc3Ry
dWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdD
YXN0PiB7Ci1zdGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVk
aW5nQ2FzdD4gcnVudGltZUNhc3QoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JiYg
dmFsdWUpOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLXN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsKLSNlbmRpZiAvLyAhQVNT
RVJUX0RJU0FCTEVECi19OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB7Ci0jaWYgIUFTU0VSVF9ESVNB
QkxFRAotc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZSopOwotI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKLX07Ci10ZW1wbGF0
ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDI+IHsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi1zdGF0aWMgdm9pZCBhc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKik7Ci0jZW5kaWYg
Ly8gIUFTU0VSVF9ESVNBQkxFRAotfTsKLQotbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KLXN0ZDo6b3B0aW9uYWw8UHJvdG9jb2xF
bnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotCi0vLyBF
bnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgotdGVtcGxhdGU8Pgotc3RkOjpvcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0
IFN0cmluZyYpOwotdGVtcGxhdGU8Pgotc3RkOjpvcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7Ci0KLX0gLy8g
bmFtZXNwYWNlIFRlc3RIZWxwZXJzCi0KLX0gLy8gbmFtZXNwYWNlIFByb3RvY29sCi0KLX0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgK
LQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0v
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCi0KLSNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJ
bnNwZWN0b3IgewotCi1uYW1lc3BhY2UgUHJvdG9jb2wgewotCi1uYW1lc3BhY2UgVGVzdEhlbHBl
cnMgewotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9
IHsKLSAgICAiRHVja3MiLAotICAgICJIZW5zIiwKLSAgICAiQ3Jvd3MiLAotICAgICJGbGFtaW5n
b3MiLAotICAgICJQaWdzIiwKLSAgICAiQ293cyIsCi0gICAgIkNhdHMiLAotfTsKLQotU3RyaW5n
IGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3Rh
bnRfdmFsdWVzW2NvZGVdOwotfQotCi0vLyBFbnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgotdGVt
cGxhdGU8Pgotc3RkOjpvcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3Rl
ZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCi17Ci0g
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6UGlncywKLSAg
ICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6
OkNvd3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0
ZWRBbmltYWxzOjpDYXRzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlVuY2FzdGVkQW5pbWFsczo6SGVucywKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgNDsgKytpKQotICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFu
dF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07Ci0K
LSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQotCi10ZW1wbGF0ZTw+Ci1zdGQ6Om9wdGlvbmFs
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPihjb25z
dCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29u
c3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpDYXN0ZWRBbmltYWxzOjpEdWNrcywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpIZW5zLAotICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkNyb3dzLAotICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkZsYW1pbmdvcywK
LSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQotICAgICAgICBpZiAo
cHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1d
KQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwotCi0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0K
LQotCi19IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwotCi0KLQotI2lmICFBU1NFUlRfRElTQUJM
RUQKLXZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZSogdmFsdWUpCi17Ci0gICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgIFN0cmlu
ZyByZXN1bHQ7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzU3RyaW5nKHJlc3Vs
dCk7Ci0gICAgQVNTRVJUKGNhc3RTdWNjZWVkZWQpOwotICAgIEFTU0VSVChyZXN1bHQgPT0gIkR1
Y2tzIiB8fCByZXN1bHQgPT0gIkhlbnMiIHx8IHJlc3VsdCA9PSAiQ3Jvd3MiIHx8IHJlc3VsdCA9
PSAiRmxhbWluZ29zIik7Ci19Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAotCi0jaWYgIUFT
U0VSVF9ESVNBQkxFRAotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKQotewotICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVl
KTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7Ci0gICAgYm9vbCBjYXN0U3Vj
Y2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0
U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKLSAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVj
dDo6aXRlcmF0b3Igc3RyaW5nUG9zID0gb2JqZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgic3RyaW5n
IikpOwotICAgICAgICBBU1NFUlQoc3RyaW5nUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAg
ICBCaW5kaW5nVHJhaXRzPFN0cmluZz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHN0cmlu
Z1Bvcy0+dmFsdWUuZ2V0KCkpOwotICAgIH0KLSAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVj
dDo6aXRlcmF0b3IgbnVtYmVyUG9zID0gb2JqZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgibnVtYmVy
IikpOwotICAgICAgICBBU1NFUlQobnVtYmVyUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAg
ICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG51bWJlclBv
cy0+dmFsdWUuZ2V0KCkpOwotICAgIH0KLSAgICB7Ci0gICAgICAgIEluc3BlY3Rvck9iamVjdDo6
aXRlcmF0b3IgYW5pbWFsc1BvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwoImFuaW1hbHMi
KSk7Ci0gICAgICAgIEFTU0VSVChhbmltYWxzUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAg
ICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+
Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShhbmltYWxzUG9zLT52YWx1ZS5nZXQoKSk7Ci0g
ICAgfQotICAgIHsKLSAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpZFBvcyA9IG9i
amVjdC0+ZmluZChBU0NJSUxpdGVyYWwoImlkIikpOwotICAgICAgICBBU1NFUlQoaWRQb3MgIT0g
b2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVI
YXNFeHBlY3RlZFR5cGUoaWRQb3MtPnZhbHVlLmdldCgpKTsKLSAgICB9Ci0gICAgewotICAgICAg
ICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIHRyZWVQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlM
aXRlcmFsKCJ0cmVlIikpOwotICAgICAgICBBU1NFUlQodHJlZVBvcyAhPSBvYmplY3QtPmVuZCgp
KTsKLSAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1
cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUodHJlZVBvcy0+dmFsdWUu
Z2V0KCkpOwotICAgIH0KLQotICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDU7Ci0gICAg
aWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKQotICAgICAgICBGQVRB
TCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09O
U3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwotfQotI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQK
LQotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmlu
ZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojpy
dW50aW1lQ2FzdChSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiYgdmFsdWUpCi17Ci0gICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVl
LT5hc09iamVjdChyZXN1bHQpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2Fz
dFN1Y2NlZWRlZCk7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUocmVzdWx0LmdldCgpKTsKLSNlbmRpZiAgLy8gIUFTU0VSVF9ESVNBQkxFRAot
ICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBl
TmVlZGluZ0Nhc3QpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3By
b2JsZW0pOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpUeXBlTmVlZGluZ0Nhc3QqPihzdGF0aWNfY2FzdDxJbnNwZWN0b3JPYmplY3RCYXNlKj4ocmVz
dWx0LmdldCgpKSk7Ci19Ci0KLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLXZvaWQgQmluZGluZ1Ry
YWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCi17
Ci0gICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG9iamVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2Jq
ZWN0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwot
Ci0gICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKLSAgICB7Ci0gICAgICAgIEluc3Bl
Y3Rvck9iamVjdDo6aXRlcmF0b3Igb2JqUG9zID0gb2JqZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgi
b2JqIikpOwotICAgICAgICBpZiAob2JqUG9zICE9IG9iamVjdC0+ZW5kKCkpIHsKLSAgICAgICAg
ICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2Jq
ZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBvcy0+dmFsdWUuZ2V0KCkpOwot
ICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkpCi0gICAgICAgIEZB
VEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwgb2JqZWN0LT50b0pT
T05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci19Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxF
RAotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSkKLXsKLSAgICBBU1NFUlRfQVJH
KHZhbHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OwotICAg
IGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOwotICAgIEFTU0VS
VF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7Ci0KLSAgICBpbnQgZm91bmRQ
cm9wZXJ0aWVzQ291bnQgPSAwOwotICAgIHsKLSAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVy
YXRvciBvYmpQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJvYmoiKSk7Ci0gICAgICAg
IGlmIChvYmpQb3MgIT0gb2JqZWN0LT5lbmQoKSkgewotICAgICAgICAgICAgQmluZGluZ1RyYWl0
czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFs
dWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52YWx1ZS5nZXQoKSk7Ci0gICAgICAgICAgICArK2Zv
dW5kUHJvcGVydGllc0NvdW50OwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChmb3VuZFByb3Bl
cnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKLSAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQg
cHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lp
KCkuZGF0YSgpKTsKLX0KLSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECi0KLX0gLy8gbmFtZXNw
YWNlIFByb3RvY29sCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgot
Ci0KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLQotCi0KLX0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCi0K
LSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29u
Ci0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNv
bmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgotCi0jaW1wb3J0
ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFi
bGVBZ2VudC5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVycy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi1AaW1w
bGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgotewotICAgIEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Ci19Ci0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJv
bGxlcgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLSAgICBfY29udHJvbGxlciA9
IGNvbnRyb2xsZXI7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewot
ICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5tbQotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbi5oCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1
aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5Ci0KLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KLQotX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90
b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAotQGVuZAotCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5oCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMubW0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KLS8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKLQotCi0KLQotIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xFdmVudERpc3BhdGNoZXJzLm1tCi0KLSMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2ltcG9ydCA8V2ViSW5zcGVjdG9y
L1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgotCi0KLUBjbGFzcyBUZXN0UHJvdG9jb2xUZXN0VHlw
ZU5lZWRpbmdDYXN0OwotQGNsYXNzIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxOwot
QGNsYXNzIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyOwotCi0KLXR5cGVkZWYgTlNf
RU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHMpIHsKLSAgICBU
ZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzUGlncywKLSAgICBUZXN0UHJvdG9jb2xUZXN0
VW5jYXN0ZWRBbmltYWxzQ293cywKLSAgICBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxz
Q2F0cywKLSAgICBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzSGVucywKLX07Ci0KLXR5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKSB7
Ci0gICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNEdWNrcywKLSAgICBUZXN0UHJvdG9j
b2xUZXN0Q2FzdGVkQW5pbWFsc0hlbnMsCi0gICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1h
bHNDcm93cywKLSAgICBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0ZsYW1pbmdvcywKLX07
Ci0KLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCi1AaW50ZXJmYWNl
IFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QgOiBSV0lQcm90b2NvbEpTT05PYmplY3QK
LS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAq
LCBpZD4gKilwYXlsb2FkOwotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgbnVtYmVyOihpbnQpbnVtYmVyIGFuaW1hbHM6KFRl
c3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMgaWRlbnRpZmllcjooaW50KWlkZW50
aWZpZXIgdHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlOwotLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpzdHJpbmc7
Ci0vKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBpbnQgbnVtYmVy
OwotLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgVGVzdFByb3Rv
Y29sVGVzdENhc3RlZEFuaW1hbHMgYW5pbWFsczsKLS8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBhc3NpZ24pIGludCBpZGVudGlmaWVyOwotLyogcmVxdWlyZWQgKi8gQHByb3Bl
cnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEg
KnRyZWU7Ci1AZW5kCi0KLV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQot
QGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSA6IFJXSVByb3RvY29s
SlNPTk9iamVjdAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5
PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09O
T2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OwotLyogb3B0aW9uYWwg
Ki8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2
ZU9iamVjdDIgKm9iajsKLUBlbmQKLQotX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1
bHQiKSkpCi1AaW50ZXJmYWNlIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIDogUldJ
UHJvdG9jb2xKU09OT2JqZWN0Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKLS0gKGluc3RhbmNldHlwZSlpbml0
V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7Ci0vKiBv
cHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xUZXN0
UmVjdXJzaXZlT2JqZWN0MSAqb2JqOwotQGVuZAotCi0KLQotCi0KLQotIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2wuaAotCi0jIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQotCi0j
aW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQ
cml2YXRlLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgot
Ci0KLQotCi0jIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKLQotIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgotI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5o
PgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1U
eXBlPgotT2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KTsKLQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sVGVzdFVu
Y2FzdGVkQW5pbWFscyB2YWx1ZSkKLXsKLSAgICBzd2l0Y2godmFsdWUpIHsKLSAgICBjYXNlIFRl
c3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzOgotICAgICAgICByZXR1cm4gQVNDSUlM
aXRlcmFsKCJQaWdzIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxz
Q293czoKLSAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiQ293cyIpOwotICAgIGNhc2UgVGVz
dFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHM6Ci0gICAgICAgIHJldHVybiBBU0NJSUxp
dGVyYWwoIkNhdHMiKTsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNI
ZW5zOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJIZW5zIik7Ci0gICAgfQotfQotCi10
ZW1wbGF0ZTw+Ci1pbmxpbmUgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFscyBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gIlBp
Z3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3M7
Ci0gICAgaWYgKHZhbHVlID09ICJDb3dzIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRl
c3RVbmNhc3RlZEFuaW1hbHNDb3dzOwotICAgIGlmICh2YWx1ZSA9PSAiQ2F0cyIpCi0gICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzQ2F0czsKLSAgICBpZiAodmFs
dWUgPT0gIkhlbnMiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5p
bWFsc0hlbnM7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFRlc3RQcm90
b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzOwotfQotCi1pbmxpbmUgU3RyaW5nIHRvUHJvdG9j
b2xTdHJpbmcoVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMgdmFsdWUpCi17Ci0gICAgc3dp
dGNoKHZhbHVlKSB7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0R1Y2tz
OgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJEdWNrcyIpOwotICAgIGNhc2UgVGVzdFBy
b3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5zOgotICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFs
KCJIZW5zIik7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0Nyb3dzOgot
ICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJDcm93cyIpOwotICAgIGNhc2UgVGVzdFByb3Rv
Y29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3M6Ci0gICAgICAgIHJldHVybiBBU0NJSUxpdGVy
YWwoIkZsYW1pbmdvcyIpOwotICAgIH0KLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIFRlc3RQcm90
b2NvbFRlc3RDYXN0ZWRBbmltYWxzIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAiRHVja3MiKQotICAgICAgICByZXR1cm4gVGVzdFBy
b3RvY29sVGVzdENhc3RlZEFuaW1hbHNEdWNrczsKLSAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQot
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNIZW5zOwotICAgIGlm
ICh2YWx1ZSA9PSAiQ3Jvd3MiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdENhc3Rl
ZEFuaW1hbHNDcm93czsKLSAgICBpZiAodmFsdWUgPT0gIkZsYW1pbmdvcyIpCi0gICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFsc0ZsYW1pbmdvczsKLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNE
dWNrczsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgotLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgotCi0jaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKLSNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKLSNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
Ci0KLUBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQot
Ci0rICh2b2lkKV9wYXJzZVR5cGVOZWVkaW5nQ2FzdDooVGVzdFByb3RvY29sVGVzdFR5cGVOZWVk
aW5nQ2FzdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3Bh
cnNlQ2FzdGVkT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOwotKyAodm9pZClfcGFyc2VVbmNhc3RlZE9iamVjdElkOihOU051bWJlciAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZvaWQpX3BhcnNlVW5jYXN0ZWRBbmlt
YWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLSsgKHZv
aWQpX3BhcnNlQ2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQ7Ci0rICh2b2lkKV9wYXJzZVJlY3Vyc2l2ZU9iamVjdDE6KFRlc3RQcm90b2Nv
bFRlc3RSZWN1cnNpdmVPYmplY3QxICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2Fk
OwotKyAodm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QyOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJz
aXZlT2JqZWN0MiAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKLQotQGVuZAot
Ci1AaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWlu
KQotCi0rICh2b2lkKV9wYXJzZVR5cGVOZWVkaW5nQ2FzdDooVGVzdFByb3RvY29sVGVzdFR5cGVO
ZWVkaW5nQ2FzdCAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10p
OwotICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdCBhbGxv
Y10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi0rICh2b2lkKV9wYXJzZUNhc3RlZE9i
amVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewot
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNz
XSk7Ci0gICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKLX0KLQotKyAodm9pZClf
cGFyc2VVbmNhc3RlZE9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDoo
aWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwg
W05TTnVtYmVyIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsK
LX0KLQotKyAodm9pZClfcGFyc2VVbmNhc3RlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKLSAgICAqb3V0VmFsdWUgPSBAKEluc3Bl
Y3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHM+
KHBheWxvYWQpKTsKLX0KLQotKyAodm9pZClfcGFyc2VDYXN0ZWRBbmltYWxzOihOU051bWJlciAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAotewotICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7Ci0gICAgKm91dFZhbHVl
ID0gQChJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVk
QW5pbWFscz4ocGF5bG9hZCkpOwotfQotCi0rICh2b2lkKV9wYXJzZVJlY3Vyc2l2ZU9iamVjdDE6
KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICoqKW91dFZhbHVlIGZyb21QYXlsb2Fk
OihpZClwYXlsb2FkCi17Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2Fk
LCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xU
ZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQot
Ci0rICh2b2lkKV9wYXJzZVJlY3Vyc2l2ZU9iamVjdDI6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNp
dmVPYmplY3QyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCi17Ci0gICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7
Ci0gICAgKm91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiBhbGxv
Y10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwotfQotCi1AZW5kCi0KLQotIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KLQotIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbFR5cGVzLm1tCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1y
ZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCi0vLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKLQotI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCi0j
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgotI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW1wb3J0IDx3dGYvQXNz
ZXJ0aW9ucy5oPgotCi11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwotCi0KLUBpbXBsZW1lbnRh
dGlvbiBUZXN0UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0Ci0KLS0gKGluc3RhbmNldHlwZSlp
bml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBh
eWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLQotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9h
ZFtAInN0cmluZyJdLCBAInN0cmluZyIpOwotICAgIHNlbGYuc3RyaW5nID0gcGF5bG9hZFtAInN0
cmluZyJdOwotCi0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXls
b2FkW0AibnVtYmVyIl0sIEAibnVtYmVyIik7Ci0gICAgc2VsZi5udW1iZXIgPSBbcGF5bG9hZFtA
Im51bWJlciJdIGludGVnZXJWYWx1ZV07Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJhbmltYWxzIl0sIEAiYW5pbWFscyIpOwotICAgIHNlbGYu
YW5pbWFscyA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFs
cz4ocGF5bG9hZFtAImFuaW1hbHMiXSk7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJpZGVudGlmaWVyIl0sIEAiaWRlbnRpZmllciIpOwotICAg
IHNlbGYuaWRlbnRpZmllciA9IFtwYXlsb2FkW0AiaWQiXSBpbnRlZ2VyVmFsdWVdOwotCi0gICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidHJlZSJdLCBA
InRyZWUiKTsKLSAgICBzZWxmLnRyZWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmpl
Y3QxIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAInRyZWUiXV07Ci0KLSAgICByZXR1
cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKWpzb25PYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGlu
aXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltqc29uT2JqZWN0IHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQo
KV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgbnVtYmVyOihpbnQp
bnVtYmVyIGFuaW1hbHM6KFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1hbHMgaWRl
bnRpZmllcjooaW50KWlkZW50aWZpZXIgdHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9i
amVjdDEgKil0cmVlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0KLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZ
KHN0cmluZywgQCJzdHJpbmciKTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BS
T1BFUlRZKHRyZWUsIEAidHJlZSIpOwotCi0gICAgc2VsZi5zdHJpbmcgPSBzdHJpbmc7Ci0gICAg
c2VsZi5udW1iZXIgPSBudW1iZXI7Ci0gICAgc2VsZi5hbmltYWxzID0gYW5pbWFsczsKLSAgICBz
ZWxmLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIHNlbGYudHJlZSA9IHRyZWU7Ci0KLSAg
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXRTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5n
Ci17Ci0gICAgW3N1cGVyIHNldFN0cmluZzpzdHJpbmcgZm9yS2V5OkAic3RyaW5nIl07Ci19Ci0K
LS0gKE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgcmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6
QCJzdHJpbmciXTsKLX0KLQotLSAodm9pZClzZXROdW1iZXI6KGludCludW1iZXIKLXsKLSAgICBb
c3VwZXIgc2V0SW50ZWdlcjpudW1iZXIgZm9yS2V5OkAibnVtYmVyIl07Ci19Ci0KLS0gKGludClu
dW1iZXIKLXsKLSAgICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJudW1iZXIiXTsKLX0K
LQotLSAodm9pZClzZXRBbmltYWxzOihUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmlt
YWxzCi17Ci0gICAgW3N1cGVyIHNldFN0cmluZzp0b1Byb3RvY29sU3RyaW5nKGFuaW1hbHMpIGZv
cktleTpAImFuaW1hbHMiXTsKLX0KLQotLSAoVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMp
YW5pbWFscwotewotICAgIHJldHVybiBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVz
dENhc3RlZEFuaW1hbHM+KFtzdXBlciBzdHJpbmdGb3JLZXk6QCJhbmltYWxzIl0pOwotfQotCi0t
ICh2b2lkKXNldElkZW50aWZpZXI6KGludClpZGVudGlmaWVyCi17Ci0gICAgW3N1cGVyIHNldElu
dGVnZXI6aWRlbnRpZmllciBmb3JLZXk6QCJpZCJdOwotfQotCi0tIChpbnQpaWRlbnRpZmllcgot
ewotICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImlkIl07Ci19Ci0KLS0gKHZvaWQp
c2V0VHJlZTooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlCi17Ci0gICAg
W3N1cGVyIHNldE9iamVjdDp0cmVlIGZvcktleTpAInRyZWUiXTsKLX0KLQotLSAoVGVzdFByb3Rv
Y29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgKil0cmVlCi17Ci0gICAgcmV0dXJuIFtbVGVzdFByb3Rv
Y29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltb
c3VwZXIgb2JqZWN0Rm9yS2V5OkAidHJlZSJdIHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV07Ci19
Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmpl
Y3QxCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9u
YXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHNlbGYub2JqID0gW1tUZXN0UHJv
dG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRb
QCJvYmoiXV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0
aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3QKLXsKLSAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltqc29uT2JqZWN0IHRv
SW5zcGVjdG9yT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0
dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0T2JqOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZl
T2JqZWN0MiAqKW9iagotewotICAgIFtzdXBlciBzZXRPYmplY3Q6b2JqIGZvcktleTpAIm9iaiJd
OwotfQotCi0tIChUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiAqKW9iagotewotICAg
IHJldHVybiBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QyIGFsbG9jXSBpbml0V2l0
aEluc3BlY3Rvck9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAIm9iaiJdIHRvSW5zcGVjdG9y
T2JqZWN0XS5nZXQoKV07Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bFRlc3RSZWN1cnNpdmVPYmplY3QyCi0KLS0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6
KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKLXsKLSAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHNl
bGYub2JqID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBhbGxvY10gaW5pdFdp
dGhQYXlsb2FkOnBheWxvYWRbQCJvYmoiXV07Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLS0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKWpz
b25PYmplY3QKLXsKLSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSW5zcGVjdG9yT2Jq
ZWN0Oltqc29uT2JqZWN0IHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV0pKQotICAgICAgICByZXR1
cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0T2JqOihUZXN0UHJv
dG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKW9iagotewotICAgIFtzdXBlciBzZXRPYmplY3Q6
b2JqIGZvcktleTpAIm9iaiJdOwotfQotCi0tIChUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2Jq
ZWN0MSAqKW9iagotewotICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmpl
Y3QxIGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpA
Im9iaiJdIHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV07Ci19Ci0KLUBlbmQKLQotCi0jIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kb21haW4tYXZhaWxhYmlsaXR5
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi1kb21haW4tYXZhaWxhYmlsaXR5Lmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDM2ZWUyYzYwMDE4MGJlMGFlMTM1OTQwYjQ0N2UxODg3MWQyN2FlYjcuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZG9tYWluLWF2YWlsYWJpbGl0eS5qc29u
CisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi17Ci0gICAgImRvbWFpbiI6ICJXZWJPbmx5
IiwKLSAgICAiYXZhaWxhYmlsaXR5IjogIndlYmIiLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAg
ICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZW5hYmxlIgotICAgICAgICB9Ci0gICAgXQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxp
Y2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGJhYjc2Y2E2Mjc5Y2UzYTRhY2Y3OTg1NTAwYjMwYjdkMWNmYjhmMGQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1h
bmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAg
QEAKLXsKLSAgICAiZG9tYWluIjogIk92ZXJsYXkiLAotICAgICJjb21tYW5kcyI6IFsKLSAgICAg
ICAgewotICAgICAgICAgICAgIm5hbWUiOiAicHJvY2Vzc1BvaW50cyIsCi0gICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50IiwgInR5cGUi
OiAibnVtYmVyIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQiLCAidHlwZSI6
ICJudW1iZXIiIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAicmV0dXJucyI6IFsKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3VsdDEiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXN1bHQyIiwgInR5cGUiOiAic3RyaW5nIiB9Ci0g
ICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtY29t
bWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4t
cGFyYW1ldGVyLW5hbWVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4YmIx
NWMwNGI2NTliOWNiOWFmZGUzNGNkNTcyMmJhOWM2ZDRkYTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRl
ci1uYW1lcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotewotICAgICJkb21h
aW4iOiAiT3ZlcmxheSIsCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAg
ICAibmFtZSI6ICJwcm9jZXNzUG9pbnRzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQxIiwgInR5cGUiOiAibnVtYmVyIiB9LAot
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQyIiwgInR5cGUiOiAibnVtYmVyIiB9Ci0g
ICAgICAgICAgICBdLAotICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAgICAgICAgIF0KLSAg
ICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFt
ZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9m
YWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbgpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZDNkM2IzY2M2NDIzY2VjMjVhNjdkYTkxMzJhNzY2ODY3NTVhNDQ0
MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUt
ZXZlbnQtcGFyYW1ldGVyLW5hbWVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBA
Ci17Ci0gICAgImRvbWFpbiI6ICJPdmVybGF5IiwKLSAgICAiZXZlbnRzIjogWwotICAgICAgICB7
Ci0gICAgICAgICAgICAibmFtZSI6ICJwcm9jZXNzZWRQb2ludHMiLAotICAgICAgICAgICAgInBh
cmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludCIsICJ0eXBlIjog
Im51bWJlciIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50IiwgInR5cGUiOiAi
bnVtYmVyIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1k
dXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9u
cy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDJmYzZhMzI3MGE2NDZhNDUw
NDQ3ZmRjMDQwMTM5OTVhOTQyYmYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uCisrKyAvZGV2L251bGwK
QEAgLTEsMTUgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVz
IjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAg
ICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJV
bmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAg
ICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5n
IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIu
IgotICAgICAgICB9Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5h
bWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMuanNvbgpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYWViYWNlZThiMjNlMWVhMzQwNWQ4YWMwYTAwMTYyMDcwMTBjOTQ4NS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlw
ZS1tZW1iZXItbmFtZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLVsKLXsK
LSAgICAiZG9tYWluIjogIk92ZXJsYXlUeXBlcyIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7
Ci0gICAgICAgICAgICAiaWQiOiAiUG9pbnQiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0
IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAieCIsICJ0eXBlIjogImludGVnZXIiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ4
IiwgInR5cGUiOiAiaW50ZWdlciIgfQotICAgICAgICAgICAgXQotICAgICAgICB9Ci0gICAgXQot
fQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVl
cy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzJhN2MzMjQ5YTQwYmQ0NDdl
MTlhOTJhOGU1NjkzMGQzZjg1OTU3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEw
ICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKLSAgICAgICAgICAg
ICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZW51bSI6IFtdCi0gICAgICAgIH0KLSAg
ICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA3MzA4ZGI5OTJkNjUyNTdmMmI1YzYzMjdlMGNhMzU0NTAyZDYxNTRh
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBl
ZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAs
MCBAQAotewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJ0eXBlcyI6IFsKLSAgICAg
ICAgewotICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAotICAgICAgICAgICAgInR5cGUi
OiAic3RyaW5nIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmll
ciBvZiBEYXRhYmFzZSBvYmplY3QuIgotICAgICAgICB9Ci0gICAgXSwKLSAgICAiZXZlbnRzIjog
WwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlT3B0aW9uYWxQYXJh
bWV0ZXJzIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiAwIH0K
LSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLW51bWJlci10eXBl
ZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVt
YmVyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmZWE1NTVlYzRmZTA4NjYy
NzhlMWZjZDczMzU0MjQyZGVmZDFiZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KKysrIC9k
ZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJEYXRhYmFzZSIs
Ci0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAot
ICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJEYXRhYmFzZSBlcnJvci4iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0
aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29k
ZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iLCAib3B0
aW9uYWwiOiAwIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVk
LW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDQwMTJjNzliNmIzOGMyMWRmZjYwN2ZlYzllZTkwYjI4MDMxMGY5MDguLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBh
cmFtZXRlci1mbGFnLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi17Ci0gICAg
ImRvbWFpbiI6ICJEYXRhYmFzZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAg
ICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAot
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNl
IG9iamVjdC4iCi0gICAgICAgIH0KLSAgICBdLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsK
LSAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAotICAg
ICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1
bW5OYW1lcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6ICJ0cnVlIiB9Ci0gICAgICAg
ICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9u
YWwtdHlwZS1tZW1iZXIuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29u
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTNlZjI4YThmODgxNGNjNjE3ZmI1ZDVi
YzIxMzA2ZDBhYWQ0ZmQwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uCisrKyAvZGV2L251bGwK
QEAgLTEsMTYgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAotICAgICJ0
eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkVycm9yIiwKLSAgICAgICAg
ICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJh
c2UgZXJyb3IuIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJF
cnJvciBtZXNzYWdlLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlw
ZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiwgIm9wdGlvbmFsIjog
ImZhbHNlIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19Ci1dCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLWRlY2xhcmF0
aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDE5Yjc1OTBjY2M2ZjZiYzM0NDNhNGEyODNjYTZmY2NmZGYzMjc3MzQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10
eXBlLXJlZmVyZW5jZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotWwotewot
ICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAg
ICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKLSAgICAgICAgICAgICIkcmVmIjogIlNvbWVUeXBlIiwKLSAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAgXQot
fQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5cGUuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUt
cmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDhjODNiYmZjZTQxMmI4YjA5ZGY3NDdhODc1ZTgwMzZkZmVjY2JjMzYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJp
bWl0aXZlLXR5cGUuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLXsKLSAgICAi
ZG9tYWluIjogIkRhdGFiYXNlIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0g
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ug
b2JqZWN0LiIKLSAgICAgICAgfQotICAgIF0sCi0gICAgImV2ZW50cyI6IFsKLSAgICAgICAgewot
ICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsCi0gICAg
ICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVt
bk5hbWVzIiwgInR5cGUiOiAiRGF0YWJhc2VJZCIgfQotICAgICAgICAgICAgXQotICAgICAgICB9
Ci0gICAgXQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXdp
dGgtbG93ZXJjYXNlLW5hbWUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTMx
OTAxZTRhOWFkOTkzNmIwMWJiYWVkOTdhMWQ0ZGEzNDg0NzhiMC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbgor
KysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIkRhdGFiYXNl
IiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJkYXRhYmFz
ZUlkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAotICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCi0gICAgICAg
IH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVj
bGFyYXRpb24uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5q
c29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjg4N2EyNzQxMTkwMGE4MGQ1MGYw
MDNlYWMzNmMxM2E5OWZhZTU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9m
YWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uCisr
KyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiUnVudGlt
ZSIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVtb3Rl
T2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAiZHJhZ29uIiwKLSAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAgICB9Ci0gICAg
XQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwt
b24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiODE3ZGI1MDQ0ZGMxZjI4NTU3MDA4YzFmMTc2MWYxYjA2OGY0
Y2U2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24t
dHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE1
ICswLDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIkZhbnRhc3kiLAotICAgICJ0eXBlcyI6IFsK
LSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkRyYWdvbkVnZyIsCi0gICAgICAgICAgICAi
dHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgZHJhZ29uIGVn
Zy4iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJjb2xvciIsICIkcmVmIjogIkNvbG9yIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0K
LSAgICBdCi19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDY3Y2Y4ZTU4MmY2NWFlNmZjNjE1NjkyODgyY2IwZjY1NzQ2MDEwOGEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJl
LWd1YXJkcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotWwotewotICAgICJk
b21haW4iOiAiTmV0d29yazEiLAotICAgICJmZWF0dXJlR3VhcmQiOiAiUExBVEZPUk0oV0VCX0NP
TU1BTkRTKSIsCi0gICAgImNvbW1hbmRzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAibmFt
ZSI6ICJsb2FkUmVzb3VyY2UiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEg
cmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ug
d2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKLSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0g
ICAgImRvbWFpbiI6ICJOZXR3b3JrMiIsCi0gICAgImZlYXR1cmVHdWFyZCI6ICJQTEFURk9STShX
RUJfVFlQRVMpIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6
ICJOZXR3b3JrRXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAg
ICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIs
ICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2Ny
aXB0aW9uIjogIkVycm9yIGNvZGUuIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0KLSAgICBd
Ci19LAotewotICAgICJkb21haW4iOiAiTmV0d29yazMiLAotICAgICJmZWF0dXJlR3VhcmQiOiAi
UExBVEZPUk0oV0VCX0VWRU5UUykiLAotICAgICJldmVudHMiOiBbCi0gICAgICAgIHsKLSAgICAg
ICAgICAgICJuYW1lIjogInJlc291cmNlTG9hZGVkIiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJBIHJlc291cmNlIHdhcyBsb2FkZWQuIgotICAgICAgICB9Ci0gICAgXQotfQotXQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTEyNjJlODg5ZmE1YmQwYjRhZTU3ZTVmN2Yx
YmFjNmNmZjNmZTkzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmli
dXRlLmpzb24KQEAgLTAsMCArMSwxMDkgQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwK
KyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlk
IiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKKyAgICAgICAg
ICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsicmVkIiwgImdyZWVu
IiwgImJsdWUiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQ29s
b3JMaXN0IiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVt
cyI6IHsgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfQorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwK
KyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAg
ICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwg
InR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3Jp
cHRpb24iOiAiRXJyb3IgY29kZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0s
CisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJz
IjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRh
dGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjog
InN0cmluZyIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJv
cHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjog
Im51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAi
RGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xv
cnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRl
cm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwg
ImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFs
IjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJuYW1lIjogImV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwKKyAgICAg
ICAgICAgICJhc3luYyI6IHRydWUsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciIH0K
KyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0
cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAi
dHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQi
LCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJv
ciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3Jz
IiwgIiRyZWYiOiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJj
eWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQor
ICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6
ICJleGVjdXRlU1FMU3luYyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAg
ICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBl
IjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlw
ZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAi
dHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAi
dHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwg
InR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIs
ICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxF
cnJvciIsICIkcmVmIjogIkVycm9yIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0
ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0IiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVt
IjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQorICAgICAgICAgICAg
XQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FM
QXN5bmMiLAorICAgICAgICAgICAgImFzeW5jIjogdHJ1ZSwKKyAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjog
IkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBl
IjogInN0cmluZyIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWwor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIs
ICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xv
ckxpc3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUi
OiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2si
XSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5k
cy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2NvbW1hbmRzLXdpdGgt
b3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2MWQ1N2Q4
MjBkZTkxNmE3M2NiZGQ5ODM4M2QxMjY0MjAzOThmNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9jb21tYW5k
cy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgpAQCAtMCwwICsxLDg1
IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlwZSI6
ICJpbnRlZ2VyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmll
ciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAor
ICAgICAgICAgICAgImVudW0iOiBbInJlZCIsICJncmVlbiIsICJibHVlIl0KKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkNvbG9yTGlzdCIsCisgICAgICAgICAgICAi
dHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIlByaW1hcnlD
b2xvcnMiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkVycm9y
IiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNj
cmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9
CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21tYW5kcyI6IFsKKyAg
ICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
cyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRl
bXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
bm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwi
OiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJv
YmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
YXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9u
YWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVm
IjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYi
OiAiQ29sb3JMaXN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1h
Z2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAg
ICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVt
cyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJu
b3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9i
amVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBh
eWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25h
bCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYi
OiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6
ICJDb2xvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFn
ZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAg
ICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRl
bXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
bm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0
aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
ZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiYWx0ZXJuYXRlQ29sb3JzIiwgIiRyZWYiOiAiQ29sb3JMaXN0
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0
cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQor
ICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5
cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0
eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIs
ICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIs
ICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQi
LCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlk
IiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNx
bEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJz
Y3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJhbHRlcm5hdGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVu
dW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAg
ICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9kZWZpbml0aW9ucy13aXRoLW1hYy1w
bGF0Zm9ybS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44MTdmMTM1ZWU1YTcyMDk3YWUzZTEzMWJkZDQwZTYwMTY5OGFiMTBjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgpAQCAtMCwwICsxLDI4IEBACit7
CisgICAgImRvbWFpbiI6ICJOZXR3b3JrIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJOZXR3b3JrRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKKyAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCisgICAgICAgICAgICAicHJv
cGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6
ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6
ICJFcnJvciBjb2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAi
Y29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJj
ZSIsCisgICAgICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAorICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0
aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAg
fQorICAgIF0sCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUi
OiAicmVzb3VyY2VMb2FkZWQiLAorICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKKyAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIHJlc291cmNlIHdhcyBsb2FkZWQuIgorICAgICAg
ICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXpl
cy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljk0YThlY2IxNzZkM2I4ZWM5YmY5NjY3NmU2M2NlYTA1MTQ2NmI4NjgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KQEAgLTAsMCArMSw1NCBA
QAorWworeworICAgICJkb21haW4iOiAiTmV0d29yazEiLAorICAgICJjb21tYW5kcyI6IFsKKyAg
ICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMSIsCisgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZy
YW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgor
ICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmsyIiwKKyAgICAi
dHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJMb2FkZXJJZCIsCisgICAg
ICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVu
aXF1ZSBsb2FkZXIgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJk
b21haW4iOiAiTmV0d29yazMiLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAg
ICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNw
ZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UyIiwKKyAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJh
bWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTMi
LAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNv
bnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmln
aW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAi
bG9hZFJlc291cmNlNCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNv
dXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRo
b3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U1IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3Bl
Y3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTYiLAorICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFt
ZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNyIs
CisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29u
dGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdp
biBjaGVja3MuIgorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZW51bS12YWx1ZXMu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2VudW0tdmFsdWVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2RhZDYxZGY3YzlmOWM3NmU2OTI4OTdj
M2RmZTBiMDgyM2Y5MGU0ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2VudW0tdmFsdWVzLmpzb24KQEAgLTAs
MCArMSwzNSBAQAoreyJkb21haW5zIjpbCit7CisgICAgImRvbWFpbiI6ICJUeXBlRG9tYWluIiwK
KyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJUeXBlRG9tYWlu
RW51bSIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0i
OiBbInNoYXJlZCIsICJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdCisgICAgICAgIH0KKyAgICBdCit9
LAoreworICAgICJkb21haW4iOiAiQ29tbWFuZERvbWFpbiIsCisgICAgImNvbW1hbmRzIjogWwor
ICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1
ZSIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFtdLAorICAgICAgICAgICAgInJldHVybnMi
OiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXR1cm5WYWx1ZSIsICJ0eXBlIjogInN0
cmluZyIsICJlbnVtIjogWyJzaGFyZWQiLCAiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyJdIH0K
KyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJF
dmVudERvbWFpbiIsCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5h
bWUiOiAiZXZlbnRXaXRoRW51bVBhcmFtZXRlciIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6
IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcmFtZXRlciIsICJ0eXBlIjogInN0cmlu
ZyIsICJlbnVtIjogWyJzaGFyZWQiLCAiYmxhY2siLCAid2hpdGUiXSB9CisgICAgICAgICAgICBd
CisgICAgICAgIH0KKyAgICBdCit9CitdfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXZlbnRzLXdpdGgtb3B0aW9uYWwt
cGFyYW1ldGVycy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmNhYmJmMTBiODM2ZjlmZjdjZDk5MjVkYjRkNmI0MWM1ZGZhODdiNDgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KQEAgLTAsMCArMSw1
OSBAQAoreworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAg
ICAgeworICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAorICAgICAgICAgICAgInR5cGUi
OiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmll
ciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAor
ICAgICAgICAgICAgInZhbHVlcyI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAgICAgICB9
LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQ29sb3JMaXN0IiwKKyAgICAgICAgICAg
ICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiUHJpbWFy
eUNvbG9ycyIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJy
b3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRl
c2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4i
IH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImV2ZW50cyI6IFsKKyAg
ICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVy
cyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRl
bXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
bm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwi
OiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJv
YmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
YXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAi
UHJpbWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICIkcmVmIjogIkNvbG9yTGlzdCIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6
ICJzdHJpbmciLCAidmFsdWVzIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNr
Il0sICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAg
ICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMi
LAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJp
bmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3Ry
aW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAi
bnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAi
b2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjog
ImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAi
RXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVm
IjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbHRlcm5h
dGVDb2xvcnMiLCAiJHJlZiI6ICJDb2xvckxpc3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgInZhbHVlcyI6IFsiY3lhbiIsICJt
YWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQor
ICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRl
Lmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1y
ZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYTg3MDgzNDllNDJkNTY3ZTJjODg3ZGI5ZTBjNzdjODM4NmYzNDY1
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRl
Lmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTc1MiBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworLy8gRGF0YWJhc2UuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRGF0YWJhc2VEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRp
c3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRGF0YWJhc2UiKTsKK0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5QcmltYXJ5Q29sb3JzIiwge1JlZDogInJlZCIs
IEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwg
W3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogZmFs
c2V9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxz
ZX1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5
bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0
ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1h
bmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwgW3sibmFt
ZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7
Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBb
ImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIs
ICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9y
cyIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRh
dGFiYXNlLmV4ZWN1dGVTUUxTeW5jIiwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAi
bnVtYmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJz
dHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRp
bWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwg
ImFsdGVybmF0ZUNvbG9ycyIsICJzY3JlZW5Db2xvciIsICJwcmludENvbG9yIl0pOworSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYyIsIFt7
Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IGZhbHNl
fSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogZmFsc2V9
XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxv
YWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJhbHRlcm5hdGVD
b2xvcnMiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4o
IkRhdGFiYXNlIik7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3Mg
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2Vu
ZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9i
YWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlz
cGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNw
YXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4g
bV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxv
bmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhs
b25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGludCBpbl9k
YXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYgaW5fcXVlcnkpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5k
IEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitjbGFzcyBBbHRlcm5hdGVEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorCitjbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciB7CitwdWJsaWM6CisgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwcmludENvbG9yJyB3
aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVy
blZhbHVlcy4KKyAgICBlbnVtIGNsYXNzIFByaW50Q29sb3IgeworICAgICAgICBDeWFuID0gMywK
KyAgICAgICAgTWFnZW50YSA9IDQsCisgICAgICAgIFllbGxvdyA9IDUsCisgICAgICAgIEJsYWNr
ID0gNiwKKyAgICB9OyAvLyBlbnVtIGNsYXNzIFByaW50Q29sb3IKKyAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhFcnJvclN0cmluZyYsIGludCBpbl9k
YXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBvcHRfb3V0X25vdGVzLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8ZG91YmxlPiogb3B0X291dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG9wdF9vdXRfdmFs
dWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZT4qIG9wdF9vdXRfcGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGlu
dD4qIG9wdF9vdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpFcnJvcj4mIG9wdF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29sb3Jz
LCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9w
cmludENvbG9yKSA9IDA7CisgICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNDYWxsYmFjayA6IHB1YmxpYyBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
Q2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmLCBpbnQgaWQpOworICAgICAgICB2b2lk
IHNlbmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYm
IGNvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogbm90
ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+KiB0aW1lc3RhbXAsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4q
IHZhbHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVj
dG9yVmFsdWU+KiBwYXlsb2FkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50Piog
ZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4m
JiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHNjcmVl
bkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4m
JiBhbHRlcm5hdGVDb2xvcnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+
KiBwcmludENvbG9yKTsKKyAgICB9OworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25z
dCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNDYWxsYmFjaz4mJiBjYWxsYmFjaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FM
U3luYyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1
ZXJ5LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mIG91dF9jb2x1
bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3QqIG91dF92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWUqIG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRlcm5hdGVDb2xvcnMsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29s
b3IsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJp
bnRDb2xvcikgPSAwOworICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrIDogcHVibGlj
IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgeworICAgIHB1YmxpYzoKKyAgICAgICAg
RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmLCBpbnQgaWQp
OworICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUg
dGltZXN0YW1wLCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCB2YWx1ZXMsIEluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2Ny
ZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0
PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKTsKKyAgICB9Owor
ICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0
YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY0NhbGxi
YWNrPiYmIGNhbGxiYWNrKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+RGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRl
KEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
KyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAg
dm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lk
IGV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
JiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0
ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citwcml2YXRlOgorICAgIEFsdGVy
bmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51
bGxwdHIgfTsKKyNlbmRpZgorcHJpdmF0ZToKKyAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
KEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
KyAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIg
fTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1h
c3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5EYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4g
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNr
ZW5kRGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQor
eworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoYmFj
a2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0RhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6
OkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNw
YXRjaGVyLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1f
YWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRj
aGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgdGhpcyk7Cit9CisKK3ZvaWQg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0
IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAg
UmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3Qo
QVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7CisKKyAgICBpZiAobWV0aG9kID09
ICJleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikKKyAgICAgICAgZXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykp
OworICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMiKQorICAgICAgICBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhyZXF1
ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhl
Y3V0ZVNRTFN5bmMiKQorICAgICAgICBleGVjdXRlU1FMU3luYyhyZXF1ZXN0SWQsIFdURk1vdmUo
cGFyYW1ldGVycykpOworICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jIikK
KyAgICAgICAgZXhlY3V0ZVNRTEFzeW5jKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7
CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAi
RGF0YWJhc2UiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKK30KKwordm9pZCBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMp
Cit7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRl
Z2VyKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRy
KTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmco
cGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyKTsKKyAgICBp
ZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgeworICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpJbnZhbGlkUGFyYW1zLCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9k
ICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMiKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBpZiAobV9hbHRlcm5hdGVEaXNw
YXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7
CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gb3V0
X2NvbHVtbk5hbWVzOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+
IG91dF9ub3RlczsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiBv
dXRfdGltZXN0YW1wOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gb3V0X3ZhbHVlczsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gb3V0X3BheWxvYWQ7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpEYXRhYmFzZUlkPiBvdXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CisgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOworICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRfYWx0ZXJu
YXRlQ29sb3JzOworICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENv
bG9yIG91dF9wcmludENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRfY29sdW1uTmFt
ZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQs
ICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0
ZXJuYXRlQ29sb3JzLCAmb3V0X3ByaW50Q29sb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkgeworICAgICAgICBpZiAob3V0X2NvbHVtbk5hbWVzKQorICAgICAgICAgICAgcmVzdWx0LT5z
ZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG91dF9jb2x1bW5OYW1lcyk7Cisg
ICAgICAgIGlmIChvdXRfbm90ZXMuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5z
ZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBvdXRfbm90ZXMuZ2V0VmFsdWUoKSk7Cisg
ICAgICAgIGlmIChvdXRfdGltZXN0YW1wLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3Vs
dC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIG91dF90aW1lc3RhbXAuZ2V0
VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfdmFsdWVzLmlzQXNzaWduZWQoKSkKKyAgICAgICAg
ICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG91dF92YWx1ZXMu
Z2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfcGF5bG9hZC5pc0Fzc2lnbmVkKCkpCisgICAg
ICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBvdXRfcGF5
bG9hZC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF9kYXRhYmFzZUlkLmlzQXNzaWduZWQo
KSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNl
SWQiKSwgb3V0X2RhdGFiYXNlSWQuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfc3FsRXJy
b3IpCisgICAgICAgICAgICByZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9y
IiksIG91dF9zcWxFcnJvcik7CisgICAgICAgIGlmIChvdXRfc2NyZWVuQ29sb3IuaXNBc3NpZ25l
ZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5D
b2xvciIpLCBvdXRfc2NyZWVuQ29sb3IuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfYWx0
ZXJuYXRlQ29sb3JzKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwo
ImFsdGVybmF0ZUNvbG9ycyIpLCBvdXRfYWx0ZXJuYXRlQ29sb3JzKTsKKyAgICAgICAgaWYgKG91
dF9wcmludENvbG9yLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBvdXRfcHJpbnRDb2xvci5nZXRWYWx1ZSgpKTsK
KyAgICB9CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpKTsKKyAgICBlbHNl
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK0RhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNr
KFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEJh
Y2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hlciks
IGlkKSB7IH0KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBub3RlcywgSW5zcGVjdG9yOjpQcm90
b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4qIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6
T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogdmFsdWVzLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIHBheWxvYWQs
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBkYXRhYmFzZUlkLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywg
SW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHByaW50Q29sb3IpCit7Cisg
ICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIGlmIChjb2x1bW5OYW1lcykKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldEFy
cmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOworICAgIGlmIChu
b3Rlcy5pc0Fzc2lnbmVkKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJub3RlcyIpLCBub3Rlcy5nZXRWYWx1ZSgpKTsKKyAgICBpZiAodGltZXN0YW1wLmlz
QXNzaWduZWQoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldERvdWJsZShBU0NJSUxpdGVyYWwo
InRpbWVzdGFtcCIpLCB0aW1lc3RhbXAuZ2V0VmFsdWUoKSk7CisgICAgaWYgKHZhbHVlcy5pc0Fz
c2lnbmVkKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2
YWx1ZXMiKSwgdmFsdWVzLmdldFZhbHVlKCkpOworICAgIGlmIChwYXlsb2FkLmlzQXNzaWduZWQo
KSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIp
LCBwYXlsb2FkLmdldFZhbHVlKCkpOworICAgIGlmIChkYXRhYmFzZUlkLmlzQXNzaWduZWQoKSkK
KyAgICAgICAganNvbk1lc3NhZ2UtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlk
IiksIGRhdGFiYXNlSWQuZ2V0VmFsdWUoKSk7CisgICAgaWYgKHNxbEVycm9yKQorICAgICAgICBq
c29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgc3FsRXJyb3Ip
OworICAgIGlmIChzY3JlZW5Db2xvci5pc0Fzc2lnbmVkKCkpCisgICAgICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBzY3JlZW5Db2xvci5nZXRW
YWx1ZSgpKTsKKyAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBqc29uTWVzc2FnZS0+
c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgYWx0ZXJuYXRlQ29sb3Jz
KTsKKyAgICBpZiAocHJpbnRDb2xvci5pc0Fzc2lnbmVkKCkpCisgICAgICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIHByaW50Q29sb3IuZ2V0VmFs
dWUoKSk7CisgICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhXVEZNb3ZlKGpzb25NZXNzYWdl
KSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiYgcGFyYW1ldGVycykKK3sKKyAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRh
YmFzZUlkIiksIG51bGxwdHIpOworICAgIFN0cmluZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInF1ZXJ5Iiks
IG51bGxwdHIpOworICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9y
cygpKSB7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICBp
ZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRh
YmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAg
IEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiBj
YWxsYmFjayA9IGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sobV9iYWNrZW5kRGlz
cGF0Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOworICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwg
Y2FsbGJhY2suY29weVJlZigpKTsKKworICAgIGlmIChlcnJvci5sZW5ndGgoKSkgeworICAgICAg
ICBjYWxsYmFjay0+ZGlzYWJsZSgpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYmIHBhcmFtZXRlcnMpCit7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJh
c2VJZCIpLCBudWxscHRyKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRj
aGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBu
dWxscHRyKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMo
KSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1
bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1
dGVTUUxTeW5jIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
cikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jKHJlcXVl
c3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgICAgICByZXR1cm47CisgICAgfQor
I2VuZGlmCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CisgICAgU3RyaW5n
IG91dF9ub3RlczsKKyAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKKyAgICBJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCBvdXRfdmFsdWVzOworICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUg
b3V0X3BheWxvYWQ7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNl
SWQgb3V0X2RhdGFiYXNlSWQ7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKKyAg
ICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRD
b2xvcjsKKyAgICBtX2FnZW50LT5leGVjdXRlU1FMU3luYyhlcnJvciwgaW5fZGF0YWJhc2VJZCwg
aW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91
dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsIG91
dF9hbHRlcm5hdGVDb2xvcnMsICZvdXRfc2NyZWVuQ29sb3IsICZvdXRfcHJpbnRDb2xvcik7CisK
KyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoQVND
SUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBvdXRfY29sdW1uTmFtZXMpOworICAgICAgICByZXN1
bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG91dF9ub3Rlcyk7CisgICAgICAg
IHJlc3VsdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIG91dF90aW1lc3Rh
bXApOworICAgICAgICByZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBv
dXRfdmFsdWVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxv
YWQiKSwgb3V0X3BheWxvYWQpOworICAgICAgICByZXN1bHQtPnNldEludGVnZXIoQVNDSUlMaXRl
cmFsKCJkYXRhYmFzZUlkIiksIG91dF9kYXRhYmFzZUlkKTsKKyAgICAgICAgcmVzdWx0LT5zZXRP
YmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBvdXRfc3FsRXJyb3IpOworICAgICAgICBy
ZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIG91dF9hbHRl
cm5hdGVDb2xvcnMpOworICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNj
cmVlbkNvbG9yIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29u
c3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxw
ZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRDb2xvcikpOworICAgIH0KKyAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCkpOworICAgIGVsc2UKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKworRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNDYWxs
YmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkg
OiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURk1vdmUoYmFja2VuZERpc3BhdGNo
ZXIpLCBpZCkgeyB9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4
ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3Rlcywg
ZG91YmxlIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QgdmFsdWVzLCBJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBjb25zdCBTdHJp
bmcmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNv
bG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKK3sK
KyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1u
TmFtZXMiKSwgY29sdW1uTmFtZXMpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7CisgICAganNvbk1lc3NhZ2UtPnNldERvdWJsZShBU0NJ
SUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOworICAgIGpzb25NZXNzYWdlLT5zZXRP
YmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWVzKTsKKyAgICBqc29uTWVzc2FnZS0+
c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHBheWxvYWQpOworICAgIGpzb25NZXNz
YWdlLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBkYXRhYmFzZUlkKTsK
KyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgc3Fs
RXJyb3IpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5D
b2xvciIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUoc2NyZWVuQ29sb3IpKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoQVNDSUlMaXRl
cmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgYWx0ZXJuYXRlQ29sb3JzKTsKKyAgICBqc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUocHJpbnRDb2xvcikpOworICAg
IENhbGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOworfQorCit2
b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKQoreworICAgIGludCBp
bl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJz
LmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0cik7CisgICAgU3RyaW5n
IGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0
KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERp
c3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFt
cywgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMiKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KyAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVl
cnkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBFcnJvclN0cmluZyBl
cnJvcjsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhl
Y3V0ZVNRTEFzeW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5k
RGlzcGF0Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOworICAgIG1fYWdlbnQtPmV4ZWN1dGVT
UUxBc3luYyhlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrLmNvcHlSZWYo
KSk7CisKKyAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgY2FsbGJhY2stPmRpc2Fi
bGUoKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZy
b250ZW5kUm91dGVyOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTog
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kUm91dGVyLmgi
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0
dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlw
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25z
LgorbmFtZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIEVycm9yOworZW51bSBjbGFzcyBQcmltYXJ5
Q29sb3JzOworfSAvLyBEYXRhYmFzZQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgor
CisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIFVuaXF1ZSBpZGVudGlm
aWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KK3R5cGVkZWYgaW50IERhdGFiYXNlSWQ7Cit0eXBl
ZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzPiBDb2xvckxpc3Q7Cit9IC8vIERhdGFiYXNlCisvLyBFbmQgb2Yg
dHlwZWRlZnMuCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRFbnVtQ29u
c3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRF
bnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51bUNvbnN0
YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qICAqLworZW51bSBjbGFz
cyBQcmltYXJ5Q29sb3JzIHsKKyAgICBSZWQgPSAwLAorICAgIEdyZWVuID0gMSwKKyAgICBCbHVl
ID0gMiwKK307IC8vIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycworLyogRGF0YWJhc2UgZXJyb3Iu
ICovCitjbGFzcyBFcnJvciA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2Ug
eworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAg
IE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAg
IEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKKyAgICB9OworCisgICAgdGVt
cGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0lu
c3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUo
b2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAg
IH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOworICAgIHB1YmxpYzoKKworICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3Nh
Z2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXNzYWdlIiksIHZhbHVlKTsKKyAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlf
Y29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcihBU0NJ
SUxpdGVyYWwoImNvZGUiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxD
b2RlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVv
ZihFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKworICAg
ICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5v
bk51bGwoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJl
ZjxFcnJvcj4qPigmcmVzdWx0KSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPEVycm9yPiByZXN1bHQgPSBFcnJv
cjo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQorICAgICAqICAgICAuc2V0
Q29kZSguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRl
cjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKwor
fSAvLyBEYXRhYmFzZQorCisKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KK3N0ZDo6b3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlw
ZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisvLyBFbnVtcyBp
biB0aGUgJ0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4KK3N0ZDo6b3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29u
c3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK30gLy8gbmFtZXNw
YWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1h
c3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsK
KworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVu
dW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgInJlZCIsCisgICAgImdyZWVuIiwKKyAgICAi
Ymx1ZSIsCisgICAgImN5YW4iLAorICAgICJtYWdlbnRhIiwKKyAgICAieWVsbG93IiwKKyAgICAi
YmxhY2siLAorfTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Cisg
ICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0
aGUgJ0RhdGFiYXNlJyBEb21haW4KK3RlbXBsYXRlPD4KK3N0ZDo6b3B0aW9uYWw8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3Qg
U3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0
YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4sCisgICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUsCisgICAg
fTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgaWYgKHByb3Rv
Y29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAg
ICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQor
CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERp
c3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13
aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90
b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
IGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgeworcHVi
bGljOgorICAgIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQ
cm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFu
ZGxlcjsgfQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9x
dWVyeSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBpbl9xdWVyeSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5j
KGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVy
eSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVl
c3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIG92ZXJyaWRl
OworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5I
YW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25n
IHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCit7
CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxi
YWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipu
b3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNv
bG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgeworICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29s
dW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsK
KyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNxbEVy
cm9yLCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7CisgICAg
ICAgIGlmIChjb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXko
QVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheSgqY29sdW1u
TmFtZXMpKTsKKyAgICAgICAgaWYgKG5vdGVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCAqbm90ZXMpOworICAgICAgICBpZiAodGlt
ZXN0YW1wKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFs
KCJ0aW1lc3RhbXAiKSwgKnRpbWVzdGFtcCk7CisgICAgICAgIGlmICh2YWx1ZXMpCisgICAgICAg
ICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBbKnZh
bHVlcyB0b0luc3BlY3Rvck9iamVjdF0pOworICAgICAgICBpZiAocGF5bG9hZCkKKyAgICAgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIFsqcGF5
bG9hZCB0b0luc3BlY3Rvck9iamVjdF0pOworICAgICAgICBpZiAoZGF0YWJhc2VJZCkKKyAgICAg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQi
KSwgKmRhdGFiYXNlSWQpOworICAgICAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgICAgICByZXN1
bHRPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIFsqc3FsRXJyb3Ig
dG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICAgICAgaWYgKHNjcmVlbkNvbG9yKQorICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCB0
b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOworICAgICAgICBpZiAoYWx0ZXJuYXRlQ29s
b3JzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImFs
dGVybmF0ZUNvbG9ycyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7
CisgICAgICAgIGlmIChwcmludENvbG9yKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50
Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpKTsKKyAgICB9OworCisgICAgaW50IG9faW5fZGF0
YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CisgICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9x
dWVyeTsKKworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07Cit9
CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3sKKyAgICBpZCBlcnJvckNhbGxiYWNrID0g
XihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
ZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipw
YXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxF
cnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNB
cnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xv
cikgeworICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7
CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1
ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVD
b2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7CisgICAgICAgIGlmIChjb2x1bW5OYW1lcykKKyAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1l
cyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheSgqY29sdW1uTmFtZXMpKTsKKyAgICAgICAgaWYgKG5v
dGVzKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJu
b3RlcyIpLCAqbm90ZXMpOworICAgICAgICBpZiAodGltZXN0YW1wKQorICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgKnRpbWVzdGFt
cCk7CisgICAgICAgIGlmICh2YWx1ZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9i
amVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBbKnZhbHVlcyB0b0luc3BlY3Rvck9iamVjdF0p
OworICAgICAgICBpZiAocGF5bG9hZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFs
dWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIFsqcGF5bG9hZCB0b0luc3BlY3Rvck9iamVjdF0p
OworICAgICAgICBpZiAoZGF0YWJhc2VJZCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
SW50ZWdlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgKmRhdGFiYXNlSWQpOworICAgICAg
ICBpZiAoc3FsRXJyb3IpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdChBU0NJ
SUxpdGVyYWwoInNxbEVycm9yIiksIFsqc3FsRXJyb3IgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAg
ICAgICAgaWYgKHNjcmVlbkNvbG9yKQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5D
b2xvcikpOworICAgICAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBpbnNwZWN0
b3JTdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgICAgIGlmIChwcmludENvbG9y
KQorICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmlu
dENvbG9yIiksIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmpl
Y3QpKTsKKyAgICB9OworCisgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7
CisgICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKKworICAgIFttX2RlbGVnYXRl
IGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6ZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19p
bl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwg
aW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCit7CisgICAgaWQgZXJy
b3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBl
bmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0
aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICpzcWxFcnJvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikgeworICAgICAgICBSZWY8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5O
YW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwor
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzcWxFcnJvciwg
QCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFN
RVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7CisgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBpbnNwZWN0b3JT
dHJpbmdBcnJheShjb2x1bW5OYW1lcykpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmlu
ZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG5vdGVzKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdGltZXN0YW1wKTsKKyAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgW3ZhbHVlcyB0
b0luc3BlY3Rvck9iamVjdF0pOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKEFTQ0lJ
TGl0ZXJhbCgicGF5bG9hZCIpLCBbcGF5bG9hZCB0b0luc3BlY3Rvck9iamVjdF0pOworICAgICAg
ICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIGRh
dGFiYXNlSWQpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwo
InNxbEVycm9yIiksIFtzcWxFcnJvciB0b0luc3BlY3Rvck9iamVjdF0pOworICAgICAgICByZXN1
bHRPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIGluc3Bl
Y3RvclN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOworICAgICAgICByZXN1bHRPYmplY3Qt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIHRvUHJvdG9jb2xTdHJpbmco
c2NyZWVuQ29sb3IpKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJwcmludENvbG9yIiksIHRvUHJvdG9jb2xTdHJpbmcocHJpbnRDb2xvcikpOworICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJl
c3VsdE9iamVjdCkpOworICAgIH07CisKKyAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0
YWJhc2VJZDsKKyAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OworCisgICAgW21f
ZGVsZWdhdGUgZXhlY3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQg
cXVlcnk6b19pbl9xdWVyeV07Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFi
YXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCit7CisgICAgaWQgZXJyb3JDYWxsYmFjayA9
IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxv
YWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwg
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29s
dW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIobm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3Ii
KTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJu
YXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICByZXN1bHRPYmplY3QtPnNl
dEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXko
Y29sdW1uTmFtZXMpKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJub3RlcyIpLCBub3Rlcyk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKEFT
Q0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHRpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIFt2YWx1ZXMgdG9JbnNwZWN0b3JP
YmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBh
eWxvYWQiKSwgW3BheWxvYWQgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBkYXRhYmFzZUlkKTsK
KyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIp
LCBbc3FsRXJyb3IgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCB0b1Byb3RvY29sU3RyaW5nKHNj
cmVlbkNvbG9yKSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFs
KCJhbHRlcm5hdGVDb2xvcnMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3Jz
KSk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRD
b2xvciIpLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3Qp
KTsKKyAgICB9OworCisgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7Cisg
ICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKKworICAgIFttX2RlbGVnYXRlIGV4
ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2lu
X3F1ZXJ5XTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90
b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRl
cmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5v
bmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0RGF0YWJhc2VIYW5kbGVyOikgaWQ8VGVzdFByb3Rv
Y29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBkYXRhYmFzZUhhbmRsZXI7CitAZW5kCisKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
cy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlciogX2NvbnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5k
bGVyPiBfZGF0YWJhc2VIYW5kbGVyOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb250
cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250cm9sbGVy
OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbX2RhdGFi
YXNlSGFuZGxlciByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQp
c2V0RGF0YWJhc2VIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+
KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfZGF0YWJhc2VIYW5kbGVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBbX2RhdGFiYXNlSGFuZGxlciByZWxlYXNlXTsKKyAgICBfZGF0YWJh
c2VIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlzcGF0
Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBzdGQ6Om1ha2VfdW5p
cXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIs
IEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+PihBU0NJSUxpdGVyYWwoIkRhdGFi
YXNlIiksICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7CisgICAg
X2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkpOwor
fQorCistIChpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+KWRhdGFiYXNlSGFu
ZGxlcgoreworICAgIHJldHVybiBfZGF0YWJhc2VIYW5kbGVyOworfQorCitAZW5kCisKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVz
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYklu
c3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvcjsKKworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnMpIHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnNSZWQsCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzR3JlZW4s
CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZSwKK307CisKK3R5cGVk
ZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IpIHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yQ3lhbiwKKyAgICBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmlu
dENvbG9yTWFnZW50YSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yWWVsbG93LAorICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JCbGFjaywKK307
CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yKSB7CisgICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JD
eWFuLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YSwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdywKKyAgICBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRD
b2xvckJsYWNrLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IpIHsKKyAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckN5YW4sCisgICAgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yWWVsbG93LAorICAgIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQmxhY2ssCit9OworCit0eXBlZGVmIE5TX0VOVU0o
TlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3Ip
IHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JDeWFu
LAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvck1hZ2Vu
dGEsCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yWWVs
bG93LAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckJs
YWNrLAorfTsKKworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0Bp
bnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVj
dAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5n
ICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihS
V0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOworLyogcmVxdWly
ZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOworLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7CitAZW5k
CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0
PgorQHJlcXVpcmVkCistICh2b2lkKWV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNX
aXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5h
bWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRh
dGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5n
PiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJh
Y2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7Cist
ICh2b2lkKWV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJh
Y2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcg
Kipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVl
cywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0
ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlk
OihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKKy0gKHZvaWQpZXhlY3V0
ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
Y29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50
IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
UHJpbnRDb2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRh
dGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxBc3lu
Y1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5O
YW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJh
c2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICph
bHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRD
b2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNl
SWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CitAZW5kCisKKworCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0
dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVj
dFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9y
Q29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+
CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9u
cy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0Vu
dW1UeXBlPgorT2JqQ0VudW1UeXBlIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKTsKKworCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOgorICAgICAgICByZXR1cm4g
QVNDSUlMaXRlcmFsKCJyZWQiKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9yc0dyZWVuOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJncmVlbiIpOworICAg
IGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZToKKyAgICAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgiYmx1ZSIpOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5l
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gInJlZCIpCisgICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnNSZWQ7CisgICAgaWYgKHZhbHVl
ID09ICJncmVlbiIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnNHcmVlbjsKKyAgICBpZiAodmFsdWUgPT0gImJsdWUiKQorICAgICAgICByZXR1cm4gVGVz
dFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzQmx1ZTsKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOwor
fQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAg
ICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1cm4g
QVNDSUlMaXRlcmFsKCJjeWFuIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yTWFnZW50YToKKyAgICAgICAg
cmV0dXJuIEFTQ0lJTGl0ZXJhbCgibWFnZW50YSIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvclllbGxvdzoK
KyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgieWVsbG93Iik7CisgICAgY2FzZSBUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
QmxhY2s6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImJsYWNrIik7CisgICAgfQorfQor
Cit0ZW1wbGF0ZTw+CitpbmxpbmUgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJp
bnRDb2xvckN5YW47CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1By
aW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVsbG93IikKKyAgICAgICAgcmV0
dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVl
c1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVlID09ICJibGFjayIpCisgICAgICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNQcmludENvbG9yQmxhY2s7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1By
aW50Q29sb3JDeWFuOworfQorCitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29s
b3IgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW46
CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImN5YW4iKTsKKyAgICBjYXNlIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9y
TWFnZW50YToKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgibWFnZW50YSIpOworICAgIGNh
c2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInllbGxvdyIp
OworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
YmxhY2siKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciBmcm9tUHJv
dG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gImN5
YW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAibWFn
ZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvck1hZ2VudGE7CisgICAgaWYgKHZhbHVlID09
ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3JZZWxsb3c7CisgICAgaWYgKHZhbHVl
ID09ICJibGFjayIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckJsYWNrOworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvckN5YW47Cit9CisKK2lubGluZSBTdHJp
bmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJp
bnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQ3lhbjoKKyAgICAgICAgcmV0dXJu
IEFTQ0lJTGl0ZXJhbCgiY3lhbiIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVj
dXRlU1FMU3luY1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFs
KCJtYWdlbnRhIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5j
UHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgieWVsbG93Iik7
CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckJs
YWNrOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJibGFjayIpOworICAgIH0KK30KKwor
dGVtcGxhdGU8PgoraW5saW5lIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmlu
dENvbG9yIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jUHJpbnRDb2xvckN5YW47CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikK
KyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENv
bG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInllbGxvdyIpCisgICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvclllbGxvdzsKKyAgICBp
ZiAodmFsdWUgPT0gImJsYWNrIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNQcmludENvbG9yQmxhY2s7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9y
Q3lhbjsKK30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFs
dWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRD
b2xvckN5YW46CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImN5YW4iKTsKKyAgICBjYXNl
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvck1hZ2VudGE6Cisg
ICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIm1hZ2VudGEiKTsKKyAgICBjYXNlIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvclllbGxvdzoKKyAgICAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgieWVsbG93Iik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3JCbGFjazoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0
ZXJhbCgiYmxhY2siKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IgZnJvbVByb3RvY29sU3RyaW5nKGNv
bnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJjeWFuIikKKyAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckN5YW47
CisgICAgaWYgKHZhbHVlID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvck1hZ2VudGE7CisgICAgaWYgKHZhbHVl
ID09ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2siKQorICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9y
QmxhY2s7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvckN5YW47Cit9CisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBh
cnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZURh
dGFiYXNlSWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwor
KyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9w
YXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNl
SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1iZXIgY2xhc3NdKTsK
KyAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJz
ZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJp
bmcgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBAKEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3Ry
aW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4ocGF5bG9hZCkpOworfQorCisr
ICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7CisgICAgKm91dFZh
bHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3Bh
cnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxv
YWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMu
aD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CisKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IKKworLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKKyAgICBzZWxmLm1lc3Nh
Z2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKKyAgICBzZWxmLmNvZGUg
PSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOworCisgICAgcmV0dXJuIHNlbGY7Cit9
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKilqc29uT2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEluc3Bl
Y3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldKSkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdl
Iik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7
CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAq
KW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2Fn
ZSJdOworfQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0
cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQor
eworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChp
bnQpY29kZQoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKK30K
KworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5q
c29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFy
YW1ldGVycy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NGI4ZGE2NzFlNWYzM2Q3NjVhNzBlNWY4
Y2MxMDAxYjJkYmM5MjkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1v
cHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTYw
NyBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1y
ZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKy8vIERhdGFiYXNlLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRh
dGFiYXNlLlByaW1hcnlDb2xvcnMiLCB7UmVkOiAicmVkIiwgR3JlZW46ICJncmVlbiIsIEJsdWU6
ICJibHVlIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiLCBbeyJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5
cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJub3RlcyIsICJ0eXBl
IjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAidGltZXN0YW1wIiwgInR5
cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJ2YWx1ZXMiLCAidHlw
ZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInBheWxvYWQiLCAidHlw
ZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogImRhdGFiYXNlSWQiLCAi
dHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInNxbEVycm9yIiwg
InR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJzY3JlZW5Db2xv
ciIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAiYWx0ZXJu
YXRlQ29sb3JzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6
ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX1dLCBbImNv
bHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJk
YXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFsdGVybmF0ZUNvbG9ycyIs
ICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFi
YXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsIFt7Im5hbWUiOiAiY29sdW1uTmFtZXMi
LCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJub3RlcyIs
ICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInRpbWVzdGFt
cCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInZhbHVl
cyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInBheWxv
YWQiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJkYXRh
YmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAi
c3FsRXJyb3IiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6
ICJzY3JlZW5Db2xvciIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJu
YW1lIjogImFsdGVybmF0ZUNvbG9ycyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IGZh
bHNlfSwgeyJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwi
OiBmYWxzZX1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMi
LCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgImFs
dGVybmF0ZUNvbG9ycyIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0
ZURvbWFpbigiRGF0YWJhc2UiKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1h
bmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlv
bmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIK
KyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVi
bGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRj
aGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0
Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJl
ZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworY2xh
c3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0ZXJuYXRlRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFy
cmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25zdCBpbl9ub3RlcywgY29uc3Qg
ZG91YmxlKiBjb25zdCBpbl90aW1lc3RhbXAsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIGNvbnN0IGlu
X3BheWxvYWQsIGNvbnN0IGludCogY29uc3QgaW5fZGF0YWJhc2VJZCwgY29uc3QgSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX3Nj
cmVlbkNvbG9yLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5KiBpbl9hbHRlcm5hdGVD
b2xvcnMsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IElu
c3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGlu
X25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdCYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIGluX3BheWxvYWQsIGlu
dCBpbl9kYXRhYmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgaW5fc3Fs
RXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEluc3BlY3Rvcjo6SW5z
cGVjdG9yQXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENv
bG9yKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVybmF0
ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29s
b3InIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzLgorICAgIGVudW0gY2xhc3MgUHJpbnRDb2xvciB7CisgICAgICAgIEN5YW4gPSAzLAor
ICAgICAgICBNYWdlbnRhID0gNCwKKyAgICAgICAgWWVsbG93ID0gNSwKKyAgICAgICAgQmxhY2sg
PSA2LAorICAgIH07IC8vIGVudW0gY2xhc3MgUHJpbnRDb2xvcgorICAgIHZpcnR1YWwgdm9pZCBl
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9y
OjpJbnNwZWN0b3JBcnJheSogb3B0X2luX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0
IG9wdF9pbl9ub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCBvcHRfaW5fdGltZXN0YW1wLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogb3B0X2luX3ZhbHVlcywgY29uc3QgSW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZSogY29uc3Qgb3B0X2luX3BheWxvYWQsIGNvbnN0IGludCogY29u
c3Qgb3B0X2luX2RhdGFiYXNlSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBv
cHRfaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0X2luX3NjcmVlbkNvbG9yLCBj
b25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5KiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLCBj
b25zdCBTdHJpbmcqIGNvbnN0IG9wdF9pbl9wcmludENvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBvcHRfb3V0X25vdGVzLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiogb3B0X291dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG9wdF9vdXRf
dmFsdWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZT4qIG9wdF9vdXRfcGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0
PGludD4qIG9wdF9vdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29s
b3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291
dF9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGlu
X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1w
LCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2Ny
ZWVuQ29sb3IsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGluX2FsdGVybmF0ZUNv
bG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMs
IGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIG91dF92
YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIG91dF9wYXlsb2FkLCBpbnQqIG91dF9k
YXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYg
b3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cyogb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkNvbG9yTGlzdD4mIG91dF9hbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAwOworcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitj
bGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRh
bEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3Zl
cnJpZGU7Citwcml2YXRlOgorICAgIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAg
ICB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURpc3Bh
dGNoZXIoQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9Citw
cml2YXRlOgorICAgIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZgorcHJpdmF0ZToKKyAgICBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqKTsKKyAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciog
bV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK0RhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjp+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0K
KworUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkp
OworfQorCitEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERpc3Bh
dGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVy
YWwoIkRhdGFiYXNlIiksIHRoaXMpOworfQorCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPElu
c3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiks
IHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycyIpCisgICAgICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElk
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVycyIpCisgICAgICAgIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
cyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGVsc2UKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIkRhdGFiYXNlIiwgJy4nLCBtZXRob2Qs
ICInIHdhcyBub3QgZm91bmQiKSk7Cit9CisKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKQoreworICAgIGJvb2wgb3B0X2luX2NvbHVtbk5h
bWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JB
cnJheT4gb3B0X2luX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXko
cGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCAmb3B0X2luX2Nv
bHVtbk5hbWVzX3ZhbHVlRm91bmQpOworICAgIGJvb2wgb3B0X2luX25vdGVzX3ZhbHVlRm91bmQg
PSBmYWxzZTsKKyAgICBTdHJpbmcgb3B0X2luX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+
Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgJm9wdF9p
bl9ub3Rlc192YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3Vu
ZCA9IGZhbHNlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+IG9w
dF9pbl90aW1lc3RhbXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1ldGVy
cy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgJm9wdF9pbl90aW1lc3RhbXBfdmFs
dWVGb3VuZCk7CisgICAgYm9vbCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG9wdF9pbl92YWx1ZXMgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFs
KCJ2YWx1ZXMiKSwgJm9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCk7CisgICAgYm9vbCBvcHRfaW5f
cGF5bG9hZF92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yVmFsdWU+IG9wdF9pbl9wYXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUo
cGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksICZvcHRfaW5fcGF5bG9h
ZF92YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQgPSBm
YWxzZTsKKyAgICBpbnQgb3B0X2luX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCAm
b3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCk7CisgICAgYm9vbCBvcHRfaW5fc3FsRXJyb3Jf
dmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4gb3B0X2luX3NxbEVycm9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFt
ZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgJm9wdF9pbl9zcWxFcnJvcl92
YWx1ZUZvdW5kKTsKKyAgICBib29sIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID0gZmFs
c2U7CisgICAgU3RyaW5nIG9wdF9pbl9zY3JlZW5Db2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiks
ICZvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCk7CisgICAgYm9vbCBvcHRfaW5fYWx0ZXJu
YXRlQ29sb3JzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JBcnJheT4gb3B0X2luX2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3Jz
IiksICZvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQpOworICAgIGJvb2wgb3B0X2lu
X3ByaW50Q29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFN0cmluZyBvcHRfaW5fcHJpbnRD
b2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBB
U0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgJm9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQp
OworICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7Cisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBv
ZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVycyIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQg
PyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fbm90ZXNfdmFsdWVG
b3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxscHRyLCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91
bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6IG51bGxwdHIsIG9wdF9pbl92YWx1ZXNfdmFsdWVGb3Vu
ZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZv
dW5kID8gb3B0X2luX3BheWxvYWQuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fZGF0YWJhc2VJZF92
YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFzZUlkIDogbnVsbHB0ciwgb3B0X2luX3NxbEVycm9y
X3ZhbHVlRm91bmQgPyBvcHRfaW5fc3FsRXJyb3IuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fc2Ny
ZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fc2NyZWVuQ29sb3IgOiBudWxscHRyLCBvcHRf
aW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPyBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLmdl
dCgpIDogbnVsbHB0ciwgb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fcHJp
bnRDb2xvciA6IG51bGxwdHIpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAg
ICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6T3B0T3V0cHV0PFN0cmluZz4gb3V0X25vdGVzOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok9wdE91dHB1dDxkb3VibGU+IG91dF90aW1lc3RhbXA7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBvdXRfdmFsdWVzOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVl
PiBvdXRfcGF5bG9hZDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQ+IG91dF9kYXRhYmFzZUlkOworICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJv
cjsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRf
c2NyZWVuQ29sb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpD
b2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7CisgICAgbV9hZ2VudC0+ZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhlcnJvciwgb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVl
Rm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fbm90ZXNf
dmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxscHRyLCBvcHRfaW5fdGltZXN0YW1wX3Zh
bHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6IG51bGxwdHIsIG9wdF9pbl92YWx1ZXNfdmFs
dWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcGF5bG9hZF92
YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fZGF0YWJh
c2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFzZUlkIDogbnVsbHB0ciwgb3B0X2luX3Nx
bEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3FsRXJyb3IuZ2V0KCkgOiBudWxscHRyLCBvcHRf
aW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fc2NyZWVuQ29sb3IgOiBudWxscHRy
LCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPyBvcHRfaW5fYWx0ZXJuYXRlQ29s
b3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCA/ICZvcHRf
aW5fcHJpbnRDb2xvciA6IG51bGxwdHIsIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91
dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBv
dXRfc3FsRXJyb3IsICZvdXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsICZvdXRf
cHJpbnRDb2xvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIGlmIChv
dXRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJh
bCgiY29sdW1uTmFtZXMiKSwgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgaWYgKG91dF9ub3Rl
cy5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoIm5vdGVzIiksIG91dF9ub3Rlcy5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF90aW1l
c3RhbXAuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoQVNDSUlM
aXRlcmFsKCJ0aW1lc3RhbXAiKSwgb3V0X3RpbWVzdGFtcC5nZXRWYWx1ZSgpKTsKKyAgICAgICAg
aWYgKG91dF92YWx1ZXMuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmpl
Y3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgb3V0X3ZhbHVlcy5nZXRWYWx1ZSgpKTsKKyAgICAg
ICAgaWYgKG91dF9wYXlsb2FkLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0
VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIG91dF9wYXlsb2FkLmdldFZhbHVlKCkpOwor
ICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVz
dWx0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBvdXRfZGF0YWJhc2VJ
ZC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHJl
c3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgb3V0X3NxbEVycm9yKTsK
KyAgICAgICAgaWYgKG91dF9zY3JlZW5Db2xvci5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICBy
ZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIG91dF9zY3JlZW5D
b2xvci5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVDb2xvcnMpCisgICAg
ICAgICAgICByZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiks
IG91dF9hbHRlcm5hdGVDb2xvcnMpOworICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaXNBc3Np
Z25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmlu
dENvbG9yIiksIG91dF9wcmludENvbG9yLmdldFZhbHVlKCkpOworICAgIH0KKyAgICBpZiAoIWVy
cm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKwordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycykKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JBcnJheT4gaW5fY29sdW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRB
cnJheShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG51bGxw
dHIpOworICAgIFN0cmluZyBpbl9ub3RlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmlu
ZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG51bGxwdHIpOworICAg
IGRvdWJsZSBpbl90aW1lc3RhbXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFy
YW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgbnVsbHB0cik7CisgICAg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl92YWx1ZXMgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ2YWx1
ZXMiKSwgbnVsbHB0cik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IGlu
X3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgp
LCBBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgbnVsbHB0cik7CisgICAgaW50IGluX2RhdGFiYXNl
SWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksIEFT
Q0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IGluX3NxbEVycm9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgbnVsbHB0
cik7CisgICAgU3RyaW5nIGluX3NjcmVlbkNvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgbnVs
bHB0cik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGluX2FsdGVybmF0
ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCks
IEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIG51bGxwdHIpOworICAgIFN0cmluZyBp
bl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMu
Z2V0KCksIEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBudWxscHRyKTsKKyAgICBpZiAobV9i
YWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgeworICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZh
bGlkUGFyYW1zLCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycg
Y2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
cyIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
cmVxdWVzdElkLCAqaW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3RhbXAsICppbl92
YWx1ZXMsICppbl9wYXlsb2FkLCBpbl9kYXRhYmFzZUlkLCAqaW5fc3FsRXJyb3IsIGluX3NjcmVl
bkNvbG9yLCAqaW5fYWx0ZXJuYXRlQ29sb3JzLCBpbl9wcmludENvbG9yKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVz
OworICAgIFN0cmluZyBvdXRfbm90ZXM7CisgICAgZG91YmxlIG91dF90aW1lc3RhbXA7CisgICAg
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Qgb3V0X3ZhbHVlczsKKyAgICBJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlIG91dF9wYXlsb2FkOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpEYXRhYmFzZUlkIG91dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5h
dGVDb2xvcnM7CisgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29s
b3Igb3V0X3ByaW50Q29sb3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKGVycm9yLCAqaW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3RhbXAsICppbl92
YWx1ZXMsICppbl9wYXlsb2FkLCBpbl9kYXRhYmFzZUlkLCAqaW5fc3FsRXJyb3IsIGluX3NjcmVl
bkNvbG9yLCAqaW5fYWx0ZXJuYXRlQ29sb3JzLCBpbl9wcmludENvbG9yLCBvdXRfY29sdW1uTmFt
ZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQs
ICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0
ZXJuYXRlQ29sb3JzLCAmb3V0X3ByaW50Q29sb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkgeworICAgICAgICByZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMi
KSwgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJub3RlcyIpLCBvdXRfbm90ZXMpOworICAgICAgICByZXN1bHQtPnNldERvdWJsZShBU0NJ
SUxpdGVyYWwoInRpbWVzdGFtcCIpLCBvdXRfdGltZXN0YW1wKTsKKyAgICAgICAgcmVzdWx0LT5z
ZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgb3V0X3ZhbHVlcyk7CisgICAgICAgIHJl
c3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIG91dF9wYXlsb2FkKTsKKyAg
ICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBvdXRf
ZGF0YWJhc2VJZCk7CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3Fs
RXJyb3IiKSwgb3V0X3NxbEVycm9yKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJzY3JlZW5Db2xvciIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6
Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3NjcmVlbkNvbG9yKSk7CisgICAgICAgIHJlc3VsdC0+
c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgb3V0X2FsdGVybmF0ZUNv
bG9ycyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xv
ciIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFs
dWUob3V0X3ByaW50Q29sb3IpKTsKKyAgICB9CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92
ZShyZXN1bHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVy
cm9yKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMt
d2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lu
Y2x1ZGUgIkluc3BlY3RvckZyb250ZW5kUm91dGVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Cisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKwor
CituYW1lc3BhY2UgUHJvdG9jb2wgeworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVz
cGFjZSBEYXRhYmFzZSB7CitjbGFzcyBFcnJvcjsKK2VudW0gY2xhc3MgUHJpbWFyeUNvbG9yczsK
K30gLy8gRGF0YWJhc2UKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBU
eXBlZGVmcy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiBVbmlxdWUgaWRlbnRpZmllciBvZiBE
YXRhYmFzZSBvYmplY3QuICovCit0eXBlZGVmIGludCBEYXRhYmFzZUlkOwordHlwZWRlZiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycz4gQ29sb3JMaXN0OworfSAvLyBEYXRhYmFzZQorLy8gRW5kIG9mIHR5cGVkZWZz
LgorCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFs
dWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0
YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVl
KHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzCisKK25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiAgKi8KK2VudW0gY2xhc3MgUHJpbWFy
eUNvbG9ycyB7CisgICAgUmVkID0gMCwKKyAgICBHcmVlbiA9IDEsCisgICAgQmx1ZSA9IDIsCit9
OyAvLyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKKy8qIERhdGFiYXNlIGVycm9yLiAqLworY2xh
c3MgRXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1Ymxp
YzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdl
U2V0ID0gMSA8PCAwLAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9JbnNwZWN0b3JP
YmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRz
U2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwg
cHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxy
ZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoQVNDSUlMaXRlcmFs
KCJjb2RlIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4o
KTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0
X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3Ip
ID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7
CisgICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+
Kj4oJnJlc3VsdCkpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0
ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4u
KQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gRGF0
YWJhc2UKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFByb3RvY29sRW51bVR5cGU+CitzdGQ6Om9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKKworLy8gRW51bXMgaW4gdGhlICdE
YXRhYmFzZScgRG9tYWluCit0ZW1wbGF0ZTw+CitzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmlu
ZyYpOworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCit9IC8vIG5hbWVzcGFjZSBQcm90
b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwt
Y2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJv
dG9jb2wgeworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitzdGF0aWMgY29uc3QgY2hhciog
Y29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAicmVkIiwKKyAgICAiZ3JlZW4i
LAorICAgICJibHVlIiwKKyAgICAiY3lhbiIsCisgICAgIm1hZ2VudGEiLAorICAgICJ5ZWxsb3ci
LAorICAgICJibGFjayIsCit9OworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNv
ZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKy8vIEVu
dW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgordGVtcGxhdGU8Pgorc3RkOjpvcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6UmVkLAorICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpHcmVlbiwKKyAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6Qmx1
ZSwKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQorICAgICAgICBp
ZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNb
aV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycyljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworCisKK30gLy8gbmFtZXNw
YWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhh
bmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4gaGFu
ZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3RvckFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25zdCBpbl9ub3Rl
cywgY29uc3QgZG91YmxlKiBjb25zdCBpbl90aW1lc3RhbXAsIGNvbnN0IEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUq
IGNvbnN0IGluX3BheWxvYWQsIGNvbnN0IGludCogY29uc3QgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGNv
bnN0IGluX3NjcmVlbkNvbG9yLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5KiBpbl9h
bHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fcHJpbnRDb2xvcikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJl
cXVlc3RJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYgaW5fY29sdW1uTmFtZXMs
IGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBpbl92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29u
c3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBT
dHJpbmcmIGluX3ByaW50Q29sb3IpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICBSZXRhaW5QdHI8
aWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
cy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0
IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcq
IGNvbnN0IGluX25vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IGluX3RpbWVzdGFtcCwgY29uc3Qg
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZSogY29uc3QgaW5fcGF5bG9hZCwgY29uc3QgaW50KiBjb25zdCBpbl9kYXRh
YmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogaW5fc3FsRXJyb3IsIGNv
bnN0IFN0cmluZyogY29uc3QgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVj
dG9yQXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBjb25zdCBpbl9wcmlu
dENvbG9yKQoreworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1
Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5T
U3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3Qg
Kip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJ
ZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiph
bHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBA
ImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2Fk
Iik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihz
cWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9P
UFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwor
ICAgICAgICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFy
cmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoKmNv
bHVtbk5hbWVzKSk7CisgICAgICAgIGlmIChub3RlcykKKyAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgKm5vdGVzKTsKKyAgICAgICAgaWYg
KHRpbWVzdGFtcCkKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0
ZXJhbCgidGltZXN0YW1wIiksICp0aW1lc3RhbXApOworICAgICAgICBpZiAodmFsdWVzKQorICAg
ICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwg
Wyp2YWx1ZXMgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICAgICAgaWYgKHBheWxvYWQpCisgICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBb
KnBheWxvYWQgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICAgICAgaWYgKGRhdGFiYXNlSWQpCisg
ICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFz
ZUlkIiksICpkYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKHNxbEVycm9yKQorICAgICAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBbKnNxbEVy
cm9yIHRvSW5zcGVjdG9yT2JqZWN0XSk7CisgICAgICAgIGlmIChzY3JlZW5Db2xvcikKKyAgICAg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3Ii
KSwgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgaWYgKGFsdGVybmF0
ZUNvbG9ycykKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFs
KCJhbHRlcm5hdGVDb2xvcnMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9y
cykpOworICAgICAgICBpZiAocHJpbnRDb2xvcikKKyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCB0b1Byb3RvY29sU3RyaW5nKCpw
cmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSk7CisgICAgfTsKKworICAgIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lczsKKyAgICBpZiAoaW5fY29sdW1uTmFtZXMp
CisgICAgICAgIG9faW5fY29sdW1uTmFtZXMgPSBvYmpjU3RyaW5nQXJyYXkoaW5fY29sdW1uTmFt
ZXMpOworICAgIE5TU3RyaW5nICpvX2luX25vdGVzOworICAgIGlmIChpbl9ub3RlcykKKyAgICAg
ICAgb19pbl9ub3RlcyA9ICppbl9ub3RlczsKKyAgICBkb3VibGUgb19pbl90aW1lc3RhbXA7Cisg
ICAgaWYgKGluX3RpbWVzdGFtcCkKKyAgICAgICAgb19pbl90aW1lc3RhbXAgPSAqaW5fdGltZXN0
YW1wOworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl92YWx1ZXM7CisgICAgaWYgKGlu
X3ZhbHVlcykKKyAgICAgICAgb19pbl92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3Qg
YWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0OmluX3ZhbHVlc10gYXV0b3JlbGVhc2VdOwor
ICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2FkOworICAgIGlmIChpbl9wYXls
b2FkKQorICAgICAgICBvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxs
b2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0OmluX3BheWxvYWRdIGF1dG9yZWxlYXNlXTsKKyAg
ICBpbnQgb19pbl9kYXRhYmFzZUlkOworICAgIGlmIChpbl9kYXRhYmFzZUlkKQorICAgICAgICBv
X2luX2RhdGFiYXNlSWQgPSAqaW5fZGF0YWJhc2VJZDsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICpvX2luX3NxbEVycm9yOworICAgIGlmIChpbl9zcWxFcnJvcikKKyAgICAgICAgb19p
bl9zcWxFcnJvciA9IFtbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRo
SW5zcGVjdG9yT2JqZWN0OmluX3NxbEVycm9yXSBhdXRvcmVsZWFzZV07CisgICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIG9faW5fc2NyZWVuQ29sb3I7CisgICAgaWYgKGluX3Nj
cmVlbkNvbG9yKQorICAgICAgICBvX2luX3NjcmVlbkNvbG9yID0gZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oKmluX3NjcmVlbkNvbG9yKTsKKyAg
ICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fYWx0ZXJuYXRlQ29sb3JzOworICAgIGlmIChp
bl9hbHRlcm5hdGVDb2xvcnMpCisgICAgICAgIG9faW5fYWx0ZXJuYXRlQ29sb3JzID0gb2JqY1N0
cmluZ0FycmF5KGluX2FsdGVybmF0ZUNvbG9ycyk7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciBvX2luX3ByaW50Q29sb3I7Cisg
ICAgaWYgKGluX3ByaW50Q29sb3IpCisgICAgICAgIG9faW5fcHJpbnRDb2xvciA9IGZyb21Qcm90
b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yPigqaW5fcHJpbnRDb2xvcik7CisKKyAgICBbbV9kZWxlZ2F0ZSBleGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihpbl9jb2x1bW5OYW1lcyA/
ICZvX2luX2NvbHVtbk5hbWVzIDogbmlsKSBub3RlczooaW5fbm90ZXMgPyAmb19pbl9ub3RlcyA6
IG5pbCkgdGltZXN0YW1wOihpbl90aW1lc3RhbXAgPyAmb19pbl90aW1lc3RhbXAgOiBuaWwpIHZh
bHVlczooaW5fdmFsdWVzID8gJm9faW5fdmFsdWVzIDogbmlsKSBwYXlsb2FkOihpbl9wYXlsb2Fk
ID8gJm9faW5fcGF5bG9hZCA6IG5pbCkgZGF0YWJhc2VJZDooaW5fZGF0YWJhc2VJZCA/ICZvX2lu
X2RhdGFiYXNlSWQgOiBuaWwpIHNxbEVycm9yOihpbl9zcWxFcnJvciA/ICZvX2luX3NxbEVycm9y
IDogbmlsKSBzY3JlZW5Db2xvcjooaW5fc2NyZWVuQ29sb3IgPyAmb19pbl9zY3JlZW5Db2xvciA6
IG5pbCkgYWx0ZXJuYXRlQ29sb3JzOihpbl9hbHRlcm5hdGVDb2xvcnMgPyAmb19pbl9hbHRlcm5h
dGVDb2xvcnMgOiBuaWwpIHByaW50Q29sb3I6KGluX3ByaW50Q29sb3IgPyAmb19pbl9wcmludENv
bG9yIDogbmlsKV07Cit9CisKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3Qg
SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYg
aW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0JiBpbl92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwg
aW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBpbl9z
cWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50
Q29sb3IpCit7CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3Vj
Y2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0
cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFs
dWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNv
bG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmlu
dENvbG9yIHByaW50Q29sb3IpIHsKKyAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsK
KyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAi
bm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
dmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBA
ImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KEFTQ0lJ
TGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMp
KTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIp
LCBub3Rlcyk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgi
dGltZXN0YW1wIiksIHRpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0
KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIFt2YWx1ZXMgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgW3Bh
eWxvYWQgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRl
Z2VyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBkYXRhYmFzZUlkKTsKKyAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBbc3FsRXJyb3Ig
dG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7
CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVD
b2xvcnMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCB0b1By
b3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpKTsKKyAgICB9Owor
CisgICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2NvbHVtbk5hbWVzID0gb2JqY1N0cmlu
Z0FycmF5KCZpbl9jb2x1bW5OYW1lcyk7CisgICAgTlNTdHJpbmcgKm9faW5fbm90ZXMgPSBpbl9u
b3RlczsKKyAgICBkb3VibGUgb19pbl90aW1lc3RhbXAgPSBpbl90aW1lc3RhbXA7CisgICAgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3ZhbHVlcyA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVj
dCBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6JmluX3ZhbHVlc10gYXV0b3JlbGVhc2Vd
OworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2FkID0gW1tbUldJUHJvdG9j
b2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDomaW5fcGF5bG9hZF0g
YXV0b3JlbGVhc2VdOworICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwor
ICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKm9faW5fc3FsRXJyb3IgPSBbW1tUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDomaW5fc3Fs
RXJyb3JdIGF1dG9yZWxlYXNlXTsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnMgb19pbl9zY3JlZW5Db2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnM+KGluX3NjcmVlbkNvbG9yKTsKKyAgICBOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKm9faW5fYWx0ZXJuYXRlQ29sb3JzID0gb2JqY1N0cmluZ0FycmF5KCZpbl9hbHRlcm5h
dGVDb2xvcnMpOworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvciBvX2luX3ByaW50Q29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPihp
bl9wcmludENvbG9yKTsKKworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjayBjb2x1bW5OYW1lczpvX2luX2NvbHVtbk5hbWVzIG5vdGVzOm9faW5fbm90ZXMg
dGltZXN0YW1wOm9faW5fdGltZXN0YW1wIHZhbHVlczpvX2luX3ZhbHVlcyBwYXlsb2FkOm9faW5f
cGF5bG9hZCBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBzcWxFcnJvcjpvX2luX3NxbEVycm9y
IHNjcmVlbkNvbG9yOm9faW5fc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOm9faW5fYWx0ZXJu
YXRlQ29sb3JzIHByaW50Q29sb3I6b19pbl9wcmludENvbG9yXTsKK30KKworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0
Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwt
Y2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKwor
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMsIHJl
dGFpbiwgc2V0dGVyPXNldERhdGFiYXNlSGFuZGxlcjopIGlkPFRlc3RQcm90b2NvbERhdGFiYXNl
RG9tYWluSGFuZGxlcj4gZGF0YWJhc2VIYW5kbGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIu
aD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyKiBfY29udHJvbGxlcjsKKyAgICBpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFp
bkhhbmRsZXI+IF9kYXRhYmFzZUhhbmRsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgor
eworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRy
b2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtf
ZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAo
dm9pZClzZXREYXRhYmFzZUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFu
ZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9kYXRhYmFzZUhhbmRsZXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIFtfZGF0YWJhc2VIYW5kbGVyIHJlbGVhc2VdOworICAgIF9k
YXRhYmFzZUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVE
aXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IHN0ZDo6bWFr
ZV91bmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8RGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlciwgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4+KEFTQ0lJTGl0ZXJhbCgi
RGF0YWJhc2UiKSwgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIpKTsK
KyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFnZW50
KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4pZGF0YWJh
c2VIYW5kbGVyCit7CisgICAgcmV0dXJuIF9kYXRhYmFzZUhhbmRsZXI7Cit9CisKK0BlbmQKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFt
ZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I7CisKKwor
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzKSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkLAorICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0dyZWVuLAorICAgIFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9yc0JsdWUsCit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2Vy
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yKSB7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvckN5YW4sCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGEsCisgICAgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKKyAgICBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxh
Y2ssCit9OworCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7CisgICAgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW4sCisg
ICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRD
b2xvck1hZ2VudGEsCisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2ssCit9OworCit0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3IpIHsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGEsCisgICAgVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93
LAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvckJsYWNrLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKSB7CisgICAg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
Q3lhbiwKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3JNYWdlbnRhLAorICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdywKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjaywKK307CisKKworX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2Fk
OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3Ry
aW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKKy8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOworQGVuZAorCitAcHJvdG9jb2wgVGVz
dFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0ByZXF1aXJlZAorLSAo
dm9pZClleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQo
XikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZChe
KShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3Rlcywg
ZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9y
cyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
ciAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFt
cDooZG91YmxlICopdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZh
bHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopcGF5bG9hZCBkYXRhYmFzZUlk
OihpbnQgKilkYXRhYmFzZUlkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoq
KXNxbEVycm9yIHNjcmVlbkNvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMg
KilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilh
bHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciAqKXByaW50Q29sb3I7CistICh2b2lkKWV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5n
ICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8q
PE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0
YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3Fs
RXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNB
cnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciBwcmludENvbG9yKSlzdWNjZXNz
Q2FsbGJhY2sgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVz
IG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1
ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpT
T05PYmplY3QgKilwYXlsb2FkIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHNxbEVycm9yOihU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KFRlc3RQcm90
b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycylzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihUZXN0UHJv
dG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IpcHJpbnRD
b2xvcjsKK0BlbmQKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVy
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJv
bGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKKwor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5
Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIE9iakNFbnVtVHlwZT4KK09iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSk7CisKKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUp
IHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc1JlZDoKKyAgICAg
ICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgicmVkIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnNHcmVlbjoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiZ3Jl
ZW4iKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU6Cisg
ICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImJsdWUiKTsKKyAgICB9Cit9CisKK3RlbXBsYXRl
PD4KK2lubGluZSBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJyZWQiKQor
ICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzUmVkOworICAg
IGlmICh2YWx1ZSA9PSAiZ3JlZW4iKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJh
c2VQcmltYXJ5Q29sb3JzR3JlZW47CisgICAgaWYgKHZhbHVlID09ICJibHVlIikKKyAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9yc0JsdWU7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9yc1JlZDsKK30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2Nv
bERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFsdWUpCit7
CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjoKKyAgICAgICAgcmV0dXJuIEFT
Q0lJTGl0ZXJhbCgiY3lhbiIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6CisgICAgICAgIHJldHVybiBB
U0NJSUxpdGVyYWwoIm1hZ2VudGEiKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFiYXNlRXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJldHVy
biBBU0NJSUxpdGVyYWwoInllbGxvdyIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOgorICAgICAgICByZXR1
cm4gQVNDSUlMaXRlcmFsKCJibGFjayIpOworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5l
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3IgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZh
bHVlID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAi
bWFnZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUgPT0gInll
bGxvdyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxhY2si
KQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQ
cmludENvbG9yQ3lhbjsKK30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFs
dWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQ3lhbjoKKyAgICAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgiY3lhbiIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJhc2VF
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6CisgICAgICAgIHJl
dHVybiBBU0NJSUxpdGVyYWwoIm1hZ2VudGEiKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoInllbGxvdyIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOgorICAgICAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsKCJibGFjayIpOworICAgIH0KK30KKwordGVtcGxhdGU8Pgor
aW5saW5lIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3IgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAg
aWYgKHZhbHVlID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1
ZSA9PSAibWFnZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yTWFnZW50YTsKKyAgICBpZiAodmFsdWUg
PT0gInllbGxvdyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAi
YmxhY2siKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckJsYWNrOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnNQcmludENvbG9yQ3lhbjsKK30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5n
KFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
ciB2YWx1ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW46CisgICAgICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoImN5YW4iKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE6CisgICAgICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoIm1hZ2VudGEiKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERh
dGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzoKKyAgICAg
ICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgieWVsbG93Iik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JCbGFjazoKKyAgICAg
ICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYmxhY2siKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4K
K2lubGluZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1By
aW50Q29sb3IgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAg
aWYgKHZhbHVlID09ICJjeWFuIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvckN5YW47CisgICAgaWYgKHZhbHVl
ID09ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvck1hZ2VudGE7CisgICAgaWYgKHZhbHVlID09
ICJ5ZWxsb3ciKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yWWVsbG93OworICAgIGlmICh2YWx1ZSA9PSAiYmxh
Y2siKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvckN5YW47Cit9CisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgdmFs
dWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOgorICAgICAgICByZXR1
cm4gQVNDSUlMaXRlcmFsKCJjeWFuIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOgorICAgICAgICByZXR1
cm4gQVNDSUlMaXRlcmFsKCJtYWdlbnRhIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JZZWxsb3c6CisgICAgICAgIHJl
dHVybiBBU0NJSUxpdGVyYWwoInllbGxvdyIpOworICAgIGNhc2UgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yQmxhY2s6CisgICAgICAgIHJl
dHVybiBBU0NJSUxpdGVyYWwoImJsYWNrIik7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+Citpbmxp
bmUgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2
YWx1ZSA9PSAiY3lhbiIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JDeWFuOworICAgIGlmICh2YWx1ZSA9PSAi
bWFnZW50YSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3JNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9PSAieWVs
bG93IikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvclllbGxvdzsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikK
KyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvckJsYWNrOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50
Q29sb3JDeWFuOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAi
VGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoRGF0YWJhc2VEb21haW4pCisKKysgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJz
ZVByaW1hcnlDb2xvcnM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOworKyAodm9pZClfcGFyc2VDb2xvckxpc3Q6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilv
dXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlRXJyb3I6KFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoRGF0YWJhc2VEb21haW4pCisKKysgKHZvaWQpX3BhcnNlRGF0YWJhc2VJZDooTlNOdW1iZXIg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOworICAgICpvdXRWYWx1
ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNlUHJpbWFyeUNvbG9y
czooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOwor
ICAgICpvdXRWYWx1ZSA9IEAoSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPihwYXlsb2FkKSk7Cit9CisKKysgKHZvaWQpX3BhcnNl
Q29sb3JMaXN0OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6
KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQs
IFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNBcnJh
eS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VFcnJvcjooVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlv
bmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCitAZW5kCisKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Y29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpT
T05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1
ZXMuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CisKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IKKwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNT
dHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0p
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJdLCBAIm1lc3NhZ2UiKTsKKyAgICBzZWxmLm1l
c3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29kZSJdLCBAImNvZGUiKTsKKyAgICBzZWxmLmNv
ZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2VyVmFsdWVdOworCisgICAgcmV0dXJuIHNlbGY7
Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilqc29uT2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aElu
c3BlY3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldKSkKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UgY29kZTooaW50KWNvZGUKK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNz
YWdlIik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNv
ZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmlu
ZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVz
c2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVy
IHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30KKworLSAodm9pZClzZXRDb2RlOihpbnQpY29k
ZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNvZGUgZm9yS2V5OkAiY29kZSJdOworfQorCist
IChpbnQpY29kZQoreworICAgIHJldHVybiBbc3VwZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsK
K30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhw
ZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMGZhZGJhN2I3NDU0NDgzZDc0MDllYTY2N2RlNzZkYWI5ZTZlNGRmOAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CkBA
IC0wLDAgKzEsODM1IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRz
LmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVy
KFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3Bh
dGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQo
KTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERp
c3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxl
OiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisK
KyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2Ug
UHJvdG9jb2wgeworCisKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFj
ZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisK
KworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1
ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJ
bnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJk
ZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmpl
Y3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNo
YWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3Rv
ckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0Bp
bXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250
cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVy
ID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7
CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xF
dmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERp
c3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8
Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCisKKworCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMu
aD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNp
b25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpD
RW51bVR5cGU+CitPYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBv
cnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CisKKworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
VmFsdWVzLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorCit1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1
bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjg2MWJhMDQ4Y2RmMzRjYTQxNDFiNmQxNGJjMTk1YTZiOWQ4NjRlY2EKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVz
Lmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTM2OCBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBOZXR3b3JrMS4KK0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMS5sb2FkUmVzb3VyY2UxIiwgW10sIFtdKTsKK0luc3Bl
Y3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmsxIik7CisKKy8vIE5ldHdvcmszLgor
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTEi
LCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxv
YWRSZXNvdXJjZTIiLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQo
Ik5ldHdvcmszLmxvYWRSZXNvdXJjZTMiLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTQiLCBbXSwgW10pOworSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTUiLCBbXSwgW10p
OworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJj
ZTYiLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsz
LmxvYWRSZXNvdXJjZTciLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFp
bigiTmV0d29yazMiKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpz
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21t
YW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNl
dEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVy
KSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFj
a2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
ZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3Bh
dGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZU5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIg
eworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25nIGNhbGxJZCkgPSAw
OworfTsKK2NsYXNzIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMg
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVy
bmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9h
ZFJlc291cmNlMShsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3Vy
Y2UyKGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMobG9u
ZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChsb25nIGNhbGxJ
ZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgY2FsbElkKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIGNhbGxJZCkgPSAwOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjsKK2NsYXNz
IEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNl
MShFcnJvclN0cmluZyYpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5OZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2Ux
KEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UyKEVycm9y
U3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UzKEVycm9yU3RyaW5n
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U0KEVycm9yU3RyaW5nJikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U1KEVycm9yU3RyaW5nJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2KEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2U3KEVycm9yU3RyaW5nJikgPSAwOworcHJvdGVjdGVkOgorICAg
IHZpcnR1YWwgfk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFz
cyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJh
Y2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJp
ZGU7Citwcml2YXRlOgorICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAgICB2b2lkIHNldEFsdGVybmF0ZURp
c3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9
Citwcml2YXRlOgorICAgIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRpZgorcHJpdmF0ZToKKyAgICBOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisKK2NsYXNzIE5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVi
bGljOgorICAgIHN0YXRpYyBSZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJh
Y2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAg
ICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVm
PEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgdm9p
ZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYm
IHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJj
ZTMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7
CisgICAgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlNShsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxv
YWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFy
YW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0
Y2hlcihBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRj
aGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3By
aXZhdGU6CisgICAgQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRlcm5h
dGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlmCitwcml2YXRlOgorICAgIE5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVySGFuZGxlciopOworICAgIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBt
X2FnZW50IHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMg
RW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYK
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK05ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjp+TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KK05ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIo
KSB7IH0KKworUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBh
Z2VudCkpOworfQorCitOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2Vu
ZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQorewor
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJ
SUxpdGVyYWwoIk5ldHdvcmsxIiksIHRoaXMpOworfQorCit2b2lkIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFy
YW1zIiksIHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlMSIp
CisgICAgICAgIGxvYWRSZXNvdXJjZTEocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsK
KyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcJycsICJO
ZXR3b3JrMSIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOworfQorCit2b2lkIE5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTEocmVxdWVzdElkKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAg
UmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIFdURk1vdmUocmVzdWx0KSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
V1RGTW92ZShlcnJvcikpOworfQorCitSZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RGlzcGF0Y2hlciwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorewor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoYmFja2Vu
ZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK05ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Ok5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRj
aGVyLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBw
bGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdl
bnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVy
Rm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiTmV0d29yazMiKSwgdGhpcyk7Cit9CisKK3ZvaWQgTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCit7CisgICAgUmVm
PE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7CisKKyAgICB0eXBlZGVmIHZvaWQgKE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFuZGxlcikobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSk7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxEaXNwYXRjaE1hcD4gZGlzcGF0Y2hNYXA7CisgICAgaWYgKGRpc3BhdGNoTWFwLmdldCgpLmlz
RW1wdHkoKSkgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IE1ldGhvZFRhYmxlIHsKKyAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAgICAgICBDYWxsSGFuZGxlciBoYW5k
bGVyOworICAgICAgICB9IGNvbW1hbmRzW10gPSB7CisgICAgICAgICAgICB7ICJsb2FkUmVzb3Vy
Y2UxIiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEgfSwKKyAgICAg
ICAgICAgIHsgImxvYWRSZXNvdXJjZTIiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlMiB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMyIsICZOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzIH0sCisgICAgICAgICAgICB7ICJsb2FkUmVz
b3VyY2U0IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQgfSwKKyAg
ICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTUiLCAmTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlNSB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNiIsICZOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2IH0sCisgICAgICAgICAgICB7ICJsb2Fk
UmVzb3VyY2U3IiwgJk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcgfSwK
KyAgICAgICAgfTsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29t
bWFuZHMpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAg
ICAgICAgICAgZGlzcGF0Y2hNYXAuZ2V0KCkuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRz
W2ldLmhhbmRsZXIpOworICAgIH0KKworICAgIGF1dG8gZmluZFJlc3VsdCA9IGRpc3BhdGNoTWFw
LmdldCgpLmZpbmQobWV0aG9kKTsKKyAgICBpZiAoZmluZFJlc3VsdCA9PSBkaXNwYXRjaE1hcC5n
ZXQoKS5lbmQoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcn
LCAiTmV0d29yazMiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgICgoKnRoaXMpLipmaW5kUmVzdWx0LT52YWx1ZSkocmVxdWVz
dElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQor
ICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyLT5sb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisjZW5kaWYKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9h
ZFJlc291cmNlMShlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3Vs
dCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsK
K30KKwordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNo
ZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UyKHJlcXVl
c3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIEVycm9yU3RyaW5n
IGVycm9yOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMihlcnJvcik7CisKKyAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCkpOworICAgIGVsc2UKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UzKHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisjZW5kaWYKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+
bG9hZFJlc291cmNlMyhlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJl
c3VsdCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3Ip
KTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3Bh
dGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U0KHJl
cXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIEVycm9yU3Ry
aW5nIGVycm9yOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNChlcnJvcik7CisKKyAg
ICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCkpOworICAgIGVsc2UKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U1KHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2Vu
dC0+bG9hZFJlc291cmNlNShlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3Zl
KHJlc3VsdCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJy
b3IpKTsKK30KKwordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmKQoreworI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U2
KHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIEVycm9y
U3RyaW5nIGVycm9yOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNihlcnJvcik7CisK
KyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCkpOworICAgIGVsc2UKKyAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30KKwordm9pZCBOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYmKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKKyAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U3KHJlcXVlc3RJZCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisjZW5kaWYKKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9h
Z2VudC0+bG9hZFJlc291cmNlNyhlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZN
b3ZlKHJlc3VsdCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUo
ZXJyb3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5z
LXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
Y2xhc3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVu
ZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6
IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclByb3RvY29sVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCisv
LyBUeXBlZGVmcy4KK25hbWVzcGFjZSBOZXR3b3JrMiB7CisvKiBVbmlxdWUgbG9hZGVyIGlkZW50
aWZpZXIuICovCit0eXBlZGVmIFN0cmluZyBMb2FkZXJJZDsKK30gLy8gTmV0d29yazIKKy8vIEVu
ZCBvZiB0eXBlZGVmcy4KKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+CisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI7CitAcHJv
dG9jb2wgVGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworCitjbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1
YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0
UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhh
bmRsZXI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkg
b3ZlcnJpZGU7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3Jr
MURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKworY2xhc3MgT2JqQ0luc3BlY3Rvck5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiBoYW5k
bGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNv
dXJjZTEobG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVz
b3VyY2UyKGxvbmcgcmVxdWVzdElkKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlMyhsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBsb2Fk
UmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9h
ZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICBSZXRh
aW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBk
b21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
Ojpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlkIGVycm9yQ2FsbGJhY2sg
PSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCkpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVy
cm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
XTsKK30KKworCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKQoreworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBe
KE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBl
cnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCkpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9y
Q2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsK
K30KKwordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlMihsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0
cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3Ip
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAg
IH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
KTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMldpdGhFcnJvckNhbGxi
YWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisK
K3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZTMobG9uZyByZXF1ZXN0SWQpCit7CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9Owor
CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Cisg
ICAgfTsKKworICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTNXaXRoRXJyb3JDYWxsYmFjazpl
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lk
IE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxv
bmcgcmVxdWVzdElkKQoreworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJv
cikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAg
IGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH07
CisKKyAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKwordm9pZCBPYmpD
SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShsb25nIHJl
cXVlc3RJZCkKK3sKKyAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOworICAgIH07CisKKyAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9OworCisg
ICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlNVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKK3ZvaWQgT2JqQ0luc3Bl
Y3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0
SWQpCit7CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vz
c0NhbGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfTsKKworICAgIFtt
X2RlbGVnYXRlIGxvYWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOworfQorCit2b2lkIE9iakNJbnNwZWN0b3JO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkKQor
eworICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxs
YmFjayA9IF57CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH07CisKKyAgICBbbV9kZWxl
Z2F0ZSBsb2FkUmVzb3VyY2U3V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNz
Q2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDog
TlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXROZXR3b3Jr
MUhhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IG5ldHdvcmsx
SGFuZGxlcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHNldHRlcj1zZXROZXR3b3Jr
M0hhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+IG5ldHdvcmsz
SGFuZGxlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24u
aCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAg
ICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworICAgIGlkPFRl
c3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gX25ldHdvcmsxSGFuZGxlcjsKKyAgICBp
ZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+IF9uZXR3b3JrM0hhbmRsZXI7Cit9
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVy
KTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpZGVhbGxvYworeworICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOworICAg
IFtfbmV0d29yazNIYW5kbGVyIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKwor
LSAodm9pZClzZXROZXR3b3JrMUhhbmRsZXI6KGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWlu
SGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09IF9uZXR3b3JrMUhhbmRsZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOworICAg
IF9uZXR3b3JrMUhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5h
dGVEaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcj4oaGFuZGxlcik7CisgICAgYXV0byBhbHRlcm5hdGVBZ2VudCA9IHN0ZDo6
bWFrZV91bmlxdWU8QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQ8TmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlciwgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4+KEFTQ0lJTGl0ZXJh
bCgiTmV0d29yazEiKSwgKl9jb250cm9sbGVyLCBXVEZNb3ZlKGFsdGVybmF0ZURpc3BhdGNoZXIp
KTsKKyAgICBfY29udHJvbGxlci0+YXBwZW5kRXh0cmFBZ2VudChXVEZNb3ZlKGFsdGVybmF0ZUFn
ZW50KSk7Cit9CisKKy0gKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4pbmV0
d29yazFIYW5kbGVyCit7CisgICAgcmV0dXJuIF9uZXR3b3JrMUhhbmRsZXI7Cit9CisKKy0gKHZv
aWQpc2V0TmV0d29yazNIYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRs
ZXI+KWhhbmRsZXIKK3sKKyAgICBpZiAoaGFuZGxlciA9PSBfbmV0d29yazNIYW5kbGVyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBbX25ldHdvcmszSGFuZGxlciByZWxlYXNlXTsKKyAgICBfbmV0
d29yazNIYW5kbGVyID0gW2hhbmRsZXIgcmV0YWluXTsKKworICAgIGF1dG8gYWx0ZXJuYXRlRGlz
cGF0Y2hlciA9IHN0ZDo6bWFrZV91bmlxdWU8T2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXI+KGhhbmRsZXIpOworICAgIGF1dG8gYWx0ZXJuYXRlQWdlbnQgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50PE5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXIsIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+PihBU0NJSUxpdGVyYWwoIk5l
dHdvcmszIiksICpfY29udHJvbGxlciwgV1RGTW92ZShhbHRlcm5hdGVEaXNwYXRjaGVyKSk7Cisg
ICAgX2NvbnRyb2xsZXItPmFwcGVuZEV4dHJhQWdlbnQoV1RGTW92ZShhbHRlcm5hdGVBZ2VudCkp
OworfQorCistIChpZDxUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+KW5ldHdvcmsz
SGFuZGxlcgoreworICAgIHJldHVybiBfbmV0d29yazNIYW5kbGVyOworfQorCitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JWYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworCisKKwor
CisKKworQHByb3RvY29sIFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlciA8TlNPYmpl
Y3Q+CitAcmVxdWlyZWQKKy0gKHZvaWQpbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOih2
b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZv
aWQoXikoKSlzdWNjZXNzQ2FsbGJhY2s7CitAZW5kCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xO
ZXR3b3JrM0RvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQHJlcXVpcmVkCistICh2b2lkKWxvYWRS
ZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKCkpc3VjY2Vzc0NhbGxiYWNrOworLSAo
dm9pZClsb2FkUmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVy
cm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKSgpKXN1Y2Nlc3NDYWxs
YmFjazsKKy0gKHZvaWQpbG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5T
U3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoKSlz
dWNjZXNzQ2FsbGJhY2s7CistICh2b2lkKWxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazoo
dm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2
b2lkKF4pKCkpc3VjY2Vzc0NhbGxiYWNrOworLSAodm9pZClsb2FkUmVzb3VyY2U1V2l0aEVycm9y
Q2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazoodm9pZCheKSgpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpbG9hZFJlc291cmNl
NldpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoKSlzdWNjZXNzQ2FsbGJhY2s7CistICh2b2lkKWxv
YWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKCkpc3VjY2Vzc0NhbGxiYWNrOwor
QGVuZAorCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbC5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5z
LXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPYmpDRW51bVR5
cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5t
bQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5n
LWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90
b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZh
Y2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrMkRvbWFpbikKKworKyAodm9p
ZClfcGFyc2VMb2FkZXJJZDooTlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucyAoTmV0d29yazJEb21haW4pCisKKysgKHZvaWQpX3BhcnNlTG9hZGVySWQ6KE5TU3RyaW5n
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFs
dWUgPSAoTlNTdHJpbmcgKilwYXlsb2FkOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW1wb3J0IDx3dGYv
QXNzZXJ0aW9ucy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKworCisjIyMg
RW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9lbnVtLXZh
bHVlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmEwODhkNDE1M2FjMTkwNjAyZjU5NmQwNmQ1MDBkMGZkMTFjYmI5ZDIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDExNzYgQEAK
KyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIFR5cGVEb21haW4uCitJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRW51bSgiVHlwZURvbWFpbi5UeXBlRG9tYWluRW51bSIsIHtTaGFyZWQ6ICJz
aGFyZWQiLCBSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJsdWUifSk7CisKKy8v
IENvbW1hbmREb21haW4uCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiQ29tbWFu
ZERvbWFpbi5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZSIsIFtdLCBbInJldHVyblZhbHVlIl0p
OworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiQ29tbWFuZERvbWFpbiIpOworCisv
LyBFdmVudERvbWFpbi4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudERvbWFpbkRpc3Bh
dGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKElu
c3BlY3RvckJhY2tlbmQsICJFdmVudERvbWFpbiIpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckVudW0oIkV2ZW50RG9tYWluLkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIiLCB7U2hh
cmVkOiAic2hhcmVkIiwgQmxhY2s6ICJibGFjayIsIFdoaXRlOiAid2hpdGUifSk7CitJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0
ZXIiLCBbInBhcmFtZXRlciJdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkV2
ZW50RG9tYWluIik7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcwor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRy
PEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9
IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERp
c3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citw
cml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hl
cjsKK307CisKKworY2xhc3MgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
IDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5BbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyBjYWxsSWQpID0gMDsK
K307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCitj
bGFzcyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisKK2NsYXNzIENvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIC8vIE5hbWVkIGFm
dGVyIHBhcmFtZXRlciAncmV0dXJuVmFsdWUnIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVu
dCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZS4KKyAgICBlbnVtIGNsYXNzIFJldHVyblZhbHVl
IHsKKyAgICAgICAgU2hhcmVkID0gMCwKKyAgICAgICAgQ3lhbiA9IDYsCisgICAgICAgIE1hZ2Vu
dGEgPSA3LAorICAgICAgICBZZWxsb3cgPSA4LAorICAgIH07IC8vIGVudW0gY2xhc3MgUmV0dXJu
VmFsdWUKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUoRXJyb3JT
dHJpbmcmLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXR1cm5WYWx1
ZSogb3V0X3JldHVyblZhbHVlKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+Q29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmRE
aXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92
ZXJyaWRlOworcHJpdmF0ZToKKyAgICB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZv
aWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERp
c3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0g
YWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsK
KyNlbmRpZgorcHJpdmF0ZToKKyAgICBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFj
a2VuZERpc3BhdGNoZXImLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7
CisgICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51
bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1
ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworQ29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkNvbW1hbmREb21haW5CYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUmVmPENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cj4gQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNo
ZXImIGJhY2tlbmREaXNwYXRjaGVyLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0NvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJh
Y2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0
Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJh
bCgiQ29tbWFuZERvbWFpbiIpLCB0aGlzKTsKK30KKwordm9pZCBDb21tYW5kRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoQVNDSUlMaXRl
cmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7CisKKyAgICBpZiAobWV0aG9kID09ICJjb21tYW5k
V2l0aEVudW1SZXR1cm5WYWx1ZSIpCisgICAgICAgIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVl
KHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgZWxzZQorICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiQ29tbWFuZERvbWFpbiIsICcuJywgbWV0
aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOworfQorCit2b2lkIENvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKHJlcXVl
c3RJZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIEVycm9yU3RyaW5n
IGVycm9yOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
UmV0dXJuVmFsdWUgb3V0X3JldHVyblZhbHVlOworICAgIG1fYWdlbnQtPmNvbW1hbmRXaXRoRW51
bVJldHVyblZhbHVlKGVycm9yLCAmb3V0X3JldHVyblZhbHVlKTsKKworICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpCisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicmV0dXJu
VmFsdWUiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFu
dFZhbHVlKG91dF9yZXR1cm5WYWx1ZSkpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92
ZShyZXN1bHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVy
cm9yKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1
ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKwor
Y2xhc3MgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIEV2ZW50
RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikg
OiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KKyAgICAgICAgLy8gTmFtZWQg
YWZ0ZXIgcGFyYW1ldGVyICdwYXJhbWV0ZXInIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVu
dCBldmVudFdpdGhFbnVtUGFyYW1ldGVyLgorICAgICAgICBlbnVtIGNsYXNzIFBhcmFtZXRlciB7
CisgICAgICAgICAgICBTaGFyZWQgPSAwLAorICAgICAgICAgICAgQmxhY2sgPSA0LAorICAgICAg
ICAgICAgV2hpdGUgPSA1LAorICAgICAgICB9OyAvLyBlbnVtIGNsYXNzIFBhcmFtZXRlcgorICAg
IHZvaWQgZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1ldGVyKTsKK3ByaXZh
dGU6CisgICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIkluc3BlY3RvckZy
b250ZW5kUm91dGVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKwordm9pZCBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6ZXZl
bnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1ldGVyKQoreworICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0
ZXJhbCgiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciIpKTsKKyAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicGFyYW1ldGVyIiksIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShwYXJh
bWV0ZXIpKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1z
IiksIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRF
dmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworLy8g
Rm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgVHlwZURvbWFpbiB7CitlbnVtIGNsYXNz
IFR5cGVEb21haW5FbnVtOworfSAvLyBUeXBlRG9tYWluCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNs
YXJhdGlvbnMuCisKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRF
bnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmlu
ZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51
bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIFR5cGVEb21haW4geworLyogICovCitl
bnVtIGNsYXNzIFR5cGVEb21haW5FbnVtIHsKKyAgICBTaGFyZWQgPSAwLAorICAgIFJlZCA9IDEs
CisgICAgR3JlZW4gPSAyLAorICAgIEJsdWUgPSAzLAorfTsgLy8gZW51bSBjbGFzcyBUeXBlRG9t
YWluRW51bQorfSAvLyBUeXBlRG9tYWluCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgorc3RkOjpvcHRpb25hbDxQcm90
b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisK
Ky8vIEVudW1zIGluIHRoZSAnVHlwZURvbWFpbicgRG9tYWluCit0ZW1wbGF0ZTw+CitzdGQ6Om9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6
VHlwZURvbWFpbkVudW0+KGNvbnN0IFN0cmluZyYpOworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVs
cGVycworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7
CisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJzaGFyZWQiLAorICAgICJyZWQiLAorICAg
ICJncmVlbiIsCisgICAgImJsdWUiLAorICAgICJibGFjayIsCisgICAgIndoaXRlIiwKKyAgICAi
Y3lhbiIsCisgICAgIm1hZ2VudGEiLAorICAgICJ5ZWxsb3ciLAorfTsKKworU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFs
dWVzW2NvZGVdOworfQorCisvLyBFbnVtcyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgordGVt
cGxhdGU8Pgorc3RkOjpvcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpU
eXBlRG9tYWluRW51bT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3Ry
aW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAg
ICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWlu
RW51bTo6U2hhcmVkLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVE
b21haW46OlR5cGVEb21haW5FbnVtOjpSZWQsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OkdyZWVuLAorICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpCbHVl
LAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgIGlm
IChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tp
XV0pCisgICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46
OlR5cGVEb21haW5FbnVtKWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKK30KKworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAvLyBuYW1l
c3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgVGVz
dFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI7CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCisKK2NsYXNzIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
IHsKK3B1YmxpYzoKKyAgICBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7
IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9CisgICAgdmlydHVhbCB2b2lkIGNvbW1hbmRXaXRoRW51
bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgUmV0
YWluUHRyPGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxl
Z2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordm9p
ZCBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kV2l0
aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKFRlc3RQcm90b2NvbENv
bW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlIHJldHVyblZh
bHVlKSB7CisgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFT
Q0lJTGl0ZXJhbCgicmV0dXJuVmFsdWUiKSwgdG9Qcm90b2NvbFN0cmluZyhyZXR1cm5WYWx1ZSkp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBX
VEZNb3ZlKHJlc3VsdE9iamVjdCkpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0ZSBjb21tYW5k
V2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJv
dG9jb2wuaD4KKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQHByb3BlcnR5IChu
b25hdG9taWMsIHJldGFpbiwgc2V0dGVyPXNldENvbW1hbmREb21haW5IYW5kbGVyOikgaWQ8VGVz
dFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+IGNvbW1hbmREb21haW5IYW5kbGVy
OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0UHJvdG9jb2xFdmVudERvbWFp
bkRvbWFpbkV2ZW50RGlzcGF0Y2hlciAqZXZlbnREb21haW5FdmVudERpc3BhdGNoZXI7CitAZW5k
CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2Nv
bnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+
IF9jb21tYW5kRG9tYWluSGFuZGxlcjsKKyAgICBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFp
bkV2ZW50RGlzcGF0Y2hlciAqX2V2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyOworfQorCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXIqKWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICgh
c2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAg
X2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KWRlYWxsb2MKK3sKKyAgICBbX2NvbW1hbmREb21haW5IYW5kbGVyIHJlbGVhc2VdOworICAgIFtf
ZXZlbnREb21haW5FdmVudERpc3BhdGNoZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2Nd
OworfQorCistICh2b2lkKXNldENvbW1hbmREb21haW5IYW5kbGVyOihpZDxUZXN0UHJvdG9jb2xD
b21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVyID09
IF9jb21tYW5kRG9tYWluSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19jb21tYW5k
RG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBfY29tbWFuZERvbWFpbkhhbmRsZXIgPSBbaGFu
ZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gc3RkOjptYWtl
X3VuaXF1ZTxPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPihoYW5k
bGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBbHRlcm5h
dGVEaXNwYXRjaGFibGVBZ2VudDxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVy
bmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4+KEFTQ0lJTGl0ZXJhbCgiQ29tbWFu
ZERvbWFpbiIpLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOwor
ICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQp
KTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+KWNv
bW1hbmREb21haW5IYW5kbGVyCit7CisgICAgcmV0dXJuIF9jb21tYW5kRG9tYWluSGFuZGxlcjsK
K30KKworLSAoVGVzdFByb3RvY29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKill
dmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIGlmICghX2V2ZW50RG9tYWluRXZlbnRE
aXNwYXRjaGVyKQorICAgICAgICBfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQ
cm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENv
bnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBfZXZlbnREb21haW5FdmVudERpc3Bh
dGNoZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMu
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JWYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0
aW9uIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyCit7CisgICAg
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyKiljb250cm9sbGVyOworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFz
ZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBf
Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQp
ZXZlbnRXaXRoRW51bVBhcmFtZXRlcldpdGhQYXJhbWV0ZXI6KFRlc3RQcm90b2NvbEV2ZW50RG9t
YWluRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlcilwYXJhbWV0ZXIKK3sKKyAgICBjb25z
dCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7
CisKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1l
dGhvZCIpLCBBU0NJSUxpdGVyYWwoIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIi
KSk7CisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
InBhcmFtZXRlciIpLCB0b1Byb3RvY29sU3RyaW5nKHBhcmFtZXRlcikpOworICAgIGpzb25NZXNz
YWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgV1RGTW92ZShwYXJhbXNPYmpl
Y3QpKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hl
cnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
KworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKwor
CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVt
KSB7CisgICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1TaGFyZWQsCisgICAgVGVzdFByb3Rv
Y29sVHlwZURvbWFpbkVudW1SZWQsCisgICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1HcmVl
biwKKyAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUJsdWUsCit9OworCisKKworQHByb3Rv
Y29sIFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KK0By
ZXF1aXJlZAorLSAodm9pZCljb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxi
YWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6KHZvaWQoXikoVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVy
blZhbHVlUmV0dXJuVmFsdWUgcmV0dXJuVmFsdWUpKXN1Y2Nlc3NDYWxsYmFjazsKK0BlbmQKKwor
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQ
cm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKKy0gKHZv
aWQpZXZlbnRXaXRoRW51bVBhcmFtZXRlcldpdGhQYXJhbWV0ZXI6KFRlc3RQcm90b2NvbEV2ZW50
RG9tYWluRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlcilwYXJhbWV0ZXI7CitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0t
dmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4K
KworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlzcGF0Y2hl
ciAoUHJpdmF0ZSkKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEluc3BlY3Rv
cjo6QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOworQGVuZAorCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT2JqQ0VudW1UeXBlIGZyb21Q
cm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCitpbmxpbmUgU3RyaW5nIHRv
UHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gdmFsdWUpCit7CisgICAg
c3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJl
ZDoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgic2hhcmVkIik7CisgICAgY2FzZSBUZXN0
UHJvdG9jb2xUeXBlRG9tYWluRW51bVJlZDoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
cmVkIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUdyZWVuOgorICAgICAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsKCJncmVlbiIpOworICAgIGNhc2UgVGVzdFByb3RvY29sVHlw
ZURvbWFpbkVudW1CbHVlOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJibHVlIik7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0g
ZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVl
ID09ICJzaGFyZWQiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1T
aGFyZWQ7CisgICAgaWYgKHZhbHVlID09ICJyZWQiKQorICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sVHlwZURvbWFpbkVudW1SZWQ7CisgICAgaWYgKHZhbHVlID09ICJncmVlbiIpCisgICAgICAg
IHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUdyZWVuOworICAgIGlmICh2YWx1ZSA9
PSAiYmx1ZSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUJsdWU7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtU2hhcmVkOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5
cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0Bp
bnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUeXBlRG9tYWluRG9tYWluKQor
CisrICh2b2lkKV9wYXJzZVR5cGVEb21haW5FbnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zIChUeXBlRG9tYWluRG9tYWluKQorCisrICh2b2lkKV9wYXJzZVR5
cGVEb21haW5FbnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5n
IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gQChJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmlu
ZzxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4ocGF5bG9hZCkpOworfQorCitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlv
bnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0
aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFs
LXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTQ3YmRmOTNmMDliNzRjZjg1Y2Ix
NDlkMDIzMTJhOGNiZjA3MWYyYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2V2ZW50cy13aXRo
LW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMTc5IEBACisjIyMg
QmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIERhdGFiYXNlLgor
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRhdGFiYXNlRGlzcGF0Y2hlciA9IEluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRh
dGFiYXNlIik7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRhdGFiYXNlLmRpZEV4
ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVz
dGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJh
bHRlcm5hdGVDb2xvcnMiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJFdmVudCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwgWyJjb2x1
bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAic3Fs
RXJyb3IiLCAic2NyZWVuQ29sb3IiLCAiYWx0ZXJuYXRlQ29sb3JzIiwgInByaW50Q29sb3IiXSk7
CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIpOworIyMjIEVuZCBG
aWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sVHlwZXMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJh
Y2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdU
Rk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3Bh
dGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2
YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsK
K307CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdp
dGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKKyNlbmRpZgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCitjbGFzcyBE
YXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgRGF0YWJhc2VGcm9udGVu
ZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRS
b3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQorICAgIHZvaWQgZGlkRXhlY3V0ZU9wdGlvbmFsUGFy
YW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gY29sdW1u
TmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgbm90ZXMsIGNvbnN0IGRvdWJsZSogY29uc3QgdGlt
ZXN0YW1wLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogY29uc3Qgc2NyZWVuQ29sb3IsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMs
IGNvbnN0IFN0cmluZyogY29uc3QgcHJpbnRDb2xvcik7CisgICAgdm9pZCBkaWRFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmlu
Zz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycyYgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYg
cHJpbnRDb2xvcik7Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91
dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRo
LW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kUm91dGVyLmgiCisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
dm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1l
dGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgbm90ZXMsIGNvbnN0IGRvdWJsZSogY29uc3QgdGltZXN0
YW1wLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogY29uc3Qgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNv
bnN0IFN0cmluZyogY29uc3QgcHJpbnRDb2xvcikKK3sKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0
PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3Nh
Z2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIkRhdGFi
YXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiKSk7CisgICAgUmVmPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBpZiAo
Y29sdW1uTmFtZXMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFs
KCJjb2x1bW5OYW1lcyIpLCBjb2x1bW5OYW1lcyk7CisgICAgaWYgKG5vdGVzKQorICAgICAgICBw
YXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksICpub3Rlcyk7Cisg
ICAgaWYgKHRpbWVzdGFtcCkKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoQVNDSUlM
aXRlcmFsKCJ0aW1lc3RhbXAiKSwgKnRpbWVzdGFtcCk7CisgICAgaWYgKHZhbHVlcykKKyAgICAg
ICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWVz
KTsKKyAgICBpZiAocGF5bG9hZCkKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZShBU0NJ
SUxpdGVyYWwoInBheWxvYWQiKSwgKnBheWxvYWQpOworICAgIGlmIChzcWxFcnJvcikKKyAgICAg
ICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBzcWxF
cnJvcik7CisgICAgaWYgKHNjcmVlbkNvbG9yKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksICpzY3JlZW5Db2xvcik7CisgICAgaWYg
KGFsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheShBU0NJSUxp
dGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBhbHRlcm5hdGVDb2xvcnMpOworICAgIGlmIChwcmlu
dENvbG9yKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInBy
aW50Q29sb3IiKSwgKnByaW50Q29sb3IpOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJwYXJhbXMiKSwgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKKworICAgIG1fZnJv
bnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisK
K3ZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gY29sdW1u
TmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzJiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9y
KQoreworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
bWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzIikpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheShBU0NJSUxp
dGVyYWwoImNvbHVtbk5hbWVzIiksIGNvbHVtbk5hbWVzKTsKKyAgICBwYXJhbXNPYmplY3QtPnNl
dFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG5vdGVzKTsKKyAgICBwYXJhbXNPYmplY3Qt
PnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOworICAgIHBh
cmFtc09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZhbHVlcyk7Cisg
ICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgcGF5bG9h
ZCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIp
LCBzcWxFcnJvcik7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJz
Y3JlZW5Db2xvciIpLCBzY3JlZW5Db2xvcik7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheShB
U0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBhbHRlcm5hdGVDb2xvcnMpOworICAgIHBh
cmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBwcmludENv
bG9yKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiks
IFdURk1vdmUocGFyYW1zT2JqZWN0KSk7CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVu
dChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2Ug
UHJvdG9jb2wgeworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBEYXRhYmFz
ZSB7CitjbGFzcyBFcnJvcjsKK30gLy8gRGF0YWJhc2UKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xh
cmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiBVbmlx
dWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuICovCit0eXBlZGVmIFN0cmluZyBEYXRh
YmFzZUlkOwordHlwZWRlZiBTdHJpbmcgUHJpbWFyeUNvbG9yczsKK3R5cGVkZWYgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnM+IENvbG9yTGlzdDsKK30gLy8gRGF0YWJhc2UKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKwor
bmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIERhdGFiYXNlIGVycm9yLiAqLworY2xhc3MgRXJyb3Ig
OiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBl
bnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdlU2V0ID0gMSA8
PCAwLAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAo
TWVzc2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4K
KyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRl
cjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAg
ICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9JbnNwZWN0b3JPYmplY3Q+JiYg
b2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVu
ZCBjbGFzcyBFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1l
c3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlf
bWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFT
Q0lJTGl0ZXJhbCgibWVzc2FnZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
Q29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQp
OworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJjb2RlIiks
IHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAg
ICAgfQorCisgICAgICAgIFJlZjxFcnJvcj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVv
ZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAg
ICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJnJlc3Vs
dCkpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgorICAgICAqIFJlZjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAg
ICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAq
ICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKK30gLy8gRGF0YWJhc2UKKwor
CisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1l
c3BhY2UgUHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5j
cHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFy
YW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5o
IgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQ
cm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0Bp
bnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNw
YXRjaGVyICpkYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2
ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwu
aCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9j
b250cm9sbGVyOworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVy
ICpfZGF0YWJhc2VFdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgor
eworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRy
b2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtf
ZGF0YWJhc2VFdmVudERpc3BhdGNoZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOwor
fQorCistIChUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKWRhdGFi
YXNlRXZlbnREaXNwYXRjaGVyCit7CisgICAgaWYgKCFfZGF0YWJhc2VFdmVudERpc3BhdGNoZXIp
CisgICAgICAgIF9kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sRGF0YWJh
c2VEb21haW5FdmVudERpc3BhdGNoZXIgYWxsb2NdIGluaXRXaXRoQ29udHJvbGxlcjpfY29udHJv
bGxlcl07CisgICAgcmV0dXJuIF9kYXRhYmFzZUV2ZW50RGlzcGF0Y2hlcjsKK30KKworQGVuZAor
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25m
aWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRh
dGlvbiBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIEF1
Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciopY29udHJvbGxlcjsKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2Vs
ZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2Nv
bnRyb2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRp
ZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1w
Oihkb3VibGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFs
dWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2FkIHNxbEVycm9yOihU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0cmlu
ZyAqKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJpbmcgKiopcHJpbnRDb2xvcgorewor
ICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRS
b3V0ZXIoKTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRF
Uihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOworICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5
bG9hZCIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihz
cWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUihzY3JlZW5Db2xvciwgQCJzY3JlZW5Db2xvciIpOworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0
ZXJuYXRlQ29sb3JzIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIpOworCisgICAgUmVmPEluc3BlY3Rvck9i
amVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJE
YXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIikpOworICAgIFJlZjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
aWYgKGNvbHVtbk5hbWVzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0
ZXJhbCgiY29sdW1uTmFtZXMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoKCpjb2x1bW5OYW1lcykp
KTsKKyAgICBpZiAobm90ZXMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgibm90ZXMiKSwgKCpub3RlcykpOworICAgIGlmICh0aW1lc3RhbXApCisgICAgICAg
IHBhcmFtc09iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksICgqdGlt
ZXN0YW1wKSk7CisgICAgaWYgKHZhbHVlcykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmpl
Y3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgWygqdmFsdWVzKSB0b0luc3BlY3Rvck9iamVjdF0p
OworICAgIGlmIChwYXlsb2FkKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKEFTQ0lJ
TGl0ZXJhbCgicGF5bG9hZCIpLCBbKCpwYXlsb2FkKSB0b0luc3BlY3Rvck9iamVjdF0pOworICAg
IGlmIChzcWxFcnJvcikKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRl
cmFsKCJzcWxFcnJvciIpLCBbKCpzcWxFcnJvcikgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICBp
ZiAoc2NyZWVuQ29sb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgic2NyZWVuQ29sb3IiKSwgKCpzY3JlZW5Db2xvcikpOworICAgIGlmIChhbHRlcm5hdGVD
b2xvcnMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRl
cm5hdGVDb2xvcnMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoKCphbHRlcm5hdGVDb2xvcnMpKSk7
CisgICAgaWYgKHByaW50Q29sb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFT
Q0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCAoKnByaW50Q29sb3IpKTsKKyAgICBqc29uTWVzc2Fn
ZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIFdURk1vdmUocGFyYW1zT2JqZWN0
KSk7CisgICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwor
fQorCistICh2b2lkKWRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5OYW1l
czooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICop
bm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQg
c3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5Db2xv
cjooTlNTdHJpbmcgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKXByaW50Q29s
b3IKK3sKKyAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZy
b250ZW5kUm91dGVyKCk7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFN
RVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNx
bEVycm9yIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc2Ny
ZWVuQ29sb3IsIEAic2NyZWVuQ29sb3IiKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocHJpbnRDb2xvciwgQCJwcmlu
dENvbG9yIik7CisKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxp
dGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyIpKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3Qg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXko
QVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheShjb2x1bW5O
YW1lcykpOworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMi
KSwgbm90ZXMpOworICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGlt
ZXN0YW1wIiksIHRpbWVzdGFtcCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoQVNDSUlM
aXRlcmFsKCJ2YWx1ZXMiKSwgW3ZhbHVlcyB0b0luc3BlY3Rvck9iamVjdF0pOworICAgIHBhcmFt
c09iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIFtwYXlsb2FkIHRvSW5z
cGVjdG9yT2JqZWN0XSk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJzcWxFcnJvciIpLCBbc3FsRXJyb3IgdG9JbnNwZWN0b3JPYmplY3RdKTsKKyAgICBwYXJhbXNP
YmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIHNjcmVlbkNvbG9y
KTsKKyAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29s
b3JzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOworICAgIHBhcmFt
c09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBwcmludENvbG9y
KTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIFdU
Rk1vdmUocGFyYW1zT2JqZWN0KSk7CisgICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBh
cmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yOworCisKKworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIp
KSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciA6IFJXSVByb3RvY29sSlNP
Tk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5T
U3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOworLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdl
OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7
CitAZW5kCisKKworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0Bp
bnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09i
amVjdAorLSAodm9pZClkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVz
OihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICoq
KW5vdGVzIHRpbWVzdGFtcDooZG91YmxlICopdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopcGF5
bG9hZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJvciBzY3Jl
ZW5Db2xvcjooTlNTdHJpbmcgKiopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5nICoq
KXByaW50Q29sb3I7CistICh2b2lkKWRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhD
b2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5T
U3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KXBheWxvYWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBz
Y3JlZW5Db2xvcjooTlNTdHJpbmcgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAq
KXByaW50Q29sb3I7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCitAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbERhdGFiYXNlRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQorLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3Bl
Y3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29u
dmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRo
LW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3Bl
Y3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09iakNFbnVtVHlwZSBmcm9t
UHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1l
dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgi
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZVBh
cnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZh
dGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFjZSBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZURh
dGFiYXNlSWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwor
KyAodm9pZClfcGFyc2VQcmltYXJ5Q29sb3JzOihOU1N0cmluZyAqKilvdXRWYWx1ZSBmcm9tUGF5
bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlQ29sb3JMaXN0OihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9w
YXJzZUVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKW91dFZhbHVlIGZyb21QYXls
b2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMgKERhdGFiYXNlRG9tYWluKQorCisrICh2b2lkKV9wYXJzZURhdGFiYXNl
SWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsK
KyAgICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilwYXlsb2FkOworfQorCisrICh2b2lkKV9wYXJz
ZVByaW1hcnlDb2xvcnM6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJp
bmcgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilwYXlsb2FkOworfQorCisr
ICh2b2lkKV9wYXJzZUNvbG9yTGlzdDooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKW91dFZhbHVl
IGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
VFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5nPiovIGNsYXNzXSk7CisgICAgKm91dFZh
bHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3Bh
cnNlRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopb3V0VmFsdWUgZnJvbVBheWxv
YWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxv
YWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNP
Tk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVl
cy5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKKworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcgorCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0
cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOworICAgIHNlbGYubWVz
c2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOworICAgIHNlbGYuY29k
ZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07CisKKyAgICByZXR1cm4gc2VsZjsK
K30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKWpzb25PYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSW5z
cGVjdG9yT2JqZWN0Oltqc29uT2JqZWN0IHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV0pKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQorewor
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1lc3Nh
Z2UiKTsKKworICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgc2VsZi5jb2RlID0gY29k
ZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE1lc3NhZ2U6KE5TU3RyaW5n
ICopbWVzc2FnZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJtZXNz
YWdlIl07Cit9CisKKy0gKE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHJldHVybiBbc3VwZXIg
c3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOworfQorCistICh2b2lkKXNldENvZGU6KGludCljb2Rl
Cit7CisgICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Cit9CisKKy0g
KGludCljb2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJdOwor
fQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uLWVy
cm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvZmFpbC1vbi1jb21tYW5kLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uLWVy
cm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmVjNjM2YzU0YjdjNWMxMDcwOWUwYzNiNjU5NGE5MmU1MWRjMmM3NTAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWNvbW1hbmQtd2l0aC1pbnZhbGlkLXBs
YXRmb3JtLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFVua25vd24gcGxhdGZvcm06
IGludmFsaWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWF2YWlsYWJpbGl0eS5q
c29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1kb21haW4tYXZhaWxhYmlsaXR5Lmpzb24tZXJyb3IK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOTBkNzE5NWQ2YWQzNmEwZDZiZjdhN2FiYzc0MTc2YzBmMjg2MGZjYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZG9tYWluLWF2YWlsYWJpbGl0eS5qc29uLWVy
cm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246
IGF2YWlsYWJpbGl0eSBpcyBhbiB1bnN1cHBvcnRlZCBzdHJpbmcuIFdhczogIndlYmIiLCBBbGxv
d2VkIHZhbHVlczogd2ViCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1jb21t
YW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxp
Y2F0ZS1jb21tYW5kLWNhbGwtcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
M2Y3NTZkZTMyNTA1MGMzM2E0OTJjZDUwZDllYWRmNDIzMDM1YjYxMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1wYXJhbWV0ZXItbmFtZXMu
anNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZp
Y2F0aW9uOiBjYWxsIHBhcmFtZXRlciBsaXN0IGZvciBjb21tYW5kIHByb2Nlc3NQb2ludHMgaGFz
IGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVw
bGljYXRlLWNvbW1hbmQtcmV0dXJuLXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
ZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFuZC1yZXR1cm4tcGFyYW1ldGVyLW5hbWVzLmpzb24tZXJy
b3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZWExNDhmZjY3Yzk2MDk0ODhhODBlNmZhMjVkM2JmYTc3OGY1ZGEwYQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJu
LXBhcmFtZXRlci1uYW1lcy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3Jt
ZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHJldHVybiBwYXJhbWV0ZXIgbGlzdCBmb3IgY29tbWFu
ZCBwcm9jZXNzUG9pbnRzIGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFtZXMuanNvbi1lcnJv
ciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLWV2ZW50LXBhcmFtZXRlci1uYW1lcy5qc29uLWVy
cm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmM3MWJiZDIxYzJjZjBjM2IwMzgwMWQ5NjM3YTRlNmQwZmMyNWFjNDQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0
ZXItbmFtZXMuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTWFsZm9ybWVkIGRvbWFp
biBzcGVjaWZpY2F0aW9uOiBwYXJhbWV0ZXIgbGlzdCBmb3IgZXZlbnQgcHJvY2Vzc2VkUG9pbnRz
IGhhcyBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9u
LWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1k
dXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NDdjZGY4
ZTI4ZTg1NjYxMGEyNmY4MTU0OTQzZjM2Y2Y4YjdkMWY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvcgpAQCAtMCww
ICsxIEBACitFUlJPUjogRHVwbGljYXRlIHR5cGUgZGVjbGFyYXRpb246IFJ1bnRpbWUuUmVtb3Rl
T2JqZWN0SWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVy
LW5hbWVzLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLW1lbWJlci1u
YW1lcy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1Mzc2YTc3YTQ1NWZkMTVmNjdkOGJjYjkzNWE2
YmE0MzhjMGE1NGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10
eXBlLW1lbWJlci1uYW1lcy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBNYWxmb3Jt
ZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHR5cGUgZGVjbGFyYXRpb24gZm9yIFBvaW50IGhhcyBk
dXBsaWNhdGUgbWVtYmVyIG5hbWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0
aC1uby12YWx1ZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVl
cy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2NTVjMmI5MDdlMDJlM2U4NGNiM2Y2NmZhMWY1OGUx
M2Q5YjdiNTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12
YWx1ZXMuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogVHlwZSByZWZlcmVuY2Ugd2l0
aCBlbnVtIHZhbHVlcyBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGVudW0gdmFsdWUuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5q
c29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVy
LWZsYWcuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45N2IyYWYwZTQ3ZTkzZjgwNDk3OTQ0NDcyNTdk
ZjMyNzIzZjA2ODI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1udW1iZXItdHlw
ZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJP
UjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSBwYXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4g
bGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tbnVtYmVyLXR5cGVkLW9wdGlvbmFs
LXR5cGUtbWVtYmVyLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRp
b25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2ZGYzNzUwYzFhNzc5Nzg5
M2NiZmI3ZTI4NzZkOTJjY2VjYzJmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9u
LW51bWJlci10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCkBAIC0wLDAgKzEg
QEAKK0VSUk9SOiBUaGUgJ29wdGlvbmFsJyBmbGFnIGZvciBhIHR5cGUgbWVtYmVyIG11c3QgYmUg
YSBib29sZWFuIGxpdGVyYWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBl
ZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJp
bmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
N2IyYWYwZTQ3ZTkzZjgwNDk3OTQ0NDcyNTdkZjMyNzIzZjA2ODI0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNv
bi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSBw
YXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2Zh
aWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjg2ZGYzNzUwYzFhNzc5Nzg5M2NiZmI3ZTI4NzZkOTJjY2VjYzJmOTEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1l
bWJlci5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUaGUgJ29wdGlvbmFsJyBmbGFn
IGZvciBhIHR5cGUgbWVtYmVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNv
bi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVy
ZW5jZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyZjU3NTNhNDM5NjE0NGViNTY2YzVjNTk2OGQw
NDlhZWM2MTgyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFy
YXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJP
UjogVHlwZSByZWZlcmVuY2UgY2Fubm90IGhhdmUgYm90aCAndHlwZScgYW5kICckcmVmJyBrZXlz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRpdmUt
dHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXJlZmVyZW5jZS1hcy1wcmltaXRp
dmUtdHlwZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3NmJjMWM3NzczYWEwZGE5ODg0OWM5M2Mz
NGMzOTJmMTYyNzYzOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtcmVm
ZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6
IFR5cGUgcmVmZXJlbmNlICdEYXRhYmFzZUlkJyBpcyBub3QgYSBwcmltaXRpdmUgdHlwZS4gQWxs
b3dlZCB2YWx1ZXM6IGludGVnZXIsIG51bWJlciwgc3RyaW5nLCBib29sZWFuLCBlbnVtLCBvYmpl
Y3QsIGFycmF5LCBhbnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWludmFs
aWQtcGxhdGZvcm0uanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWludmFsaWQt
cGxhdGZvcm0uanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYzYzNmM1NGI3YzVjMTA3MDllMGMzYjY1
OTRhOTJlNTFkYzJjNzUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXdp
dGgtaW52YWxpZC1wbGF0Zm9ybS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBVbmtu
b3duIHBsYXRmb3JtOiBpbnZhbGlkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0
aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgtbG93
ZXJjYXNlLW5hbWUuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZTQ2MjI1MGMwYWY4MGExNzllMDZh
YWY0NWQyMWViNTQ2ZGI4ODE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi10eXBl
LXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogVHlw
ZXMgbXVzdCBiZWdpbiB3aXRoIGFuIHVwcGVyY2FzZSBjaGFyYWN0ZXIuCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5q
c29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUt
ZGVjbGFyYXRpb24uanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZDM4ZTY0Njc1ZGE1YWU1YzI2M2Q1
NDZlODUzNGI0OWYzYjVlOWM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZmFpbC1vbi11bmtu
b3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvcgpAQCAtMCww
ICsxIEBACitFUlJPUjogVHlwZSByZWZlcmVuY2UgJ2RyYWdvbicgaXMgbm90IGEgcHJpbWl0aXZl
IHR5cGUuIEFsbG93ZWQgdmFsdWVzOiBpbnRlZ2VyLCBudW1iZXIsIHN0cmluZywgYm9vbGVhbiwg
ZW51bSwgb2JqZWN0LCBhcnJheSwgYW55CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25v
d24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2ZhaWwt
b24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmZhZjY2NzJjYmVmMDk2MzBmZDliZThmZmFkYWNlMTJjNTYxMWNjYTgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1t
ZW1iZXIuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTG9va3VwIGZhaWxlZCBmb3Ig
dHlwZSByZWZlcmVuY2U6IENvbG9yIChyZWZlcmVuY2VkIGZyb20gZG9tYWluOiBGYW50YXN5KQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpz
b24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0ZmIyNTNjOWMzZGE4Nzk1YTEwZWY5ZWU5NGYwYzU5NDM3
ZDI5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVh
dHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMTk5IEBACisjIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gTmV0d29yazEuCitJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazEubG9hZFJlc291cmNlIiwgW10s
IFtdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmsxIik7CisKKy8v
IE5ldHdvcmszLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck5ldHdvcmszRGlzcGF0Y2hlciA9
IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9y
QmFja2VuZCwgIk5ldHdvcmszIik7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIk5l
dHdvcmszLnJlc291cmNlTG9hZGVkIiwgW10pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURv
bWFpbigiTmV0d29yazMiKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRz
LmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgt
ZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZv
aWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3Bh
dGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAg
ICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5k
RGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworI2lmIFBMQVRGT1JNKFdF
Ql9DT01NQU5EUykKK2NsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgOiBw
dWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1YWwg
fkFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElkKSA9IDA7Cit9OworI2VuZGlmIC8vIFBMQVRGT1JN
KFdFQl9DT01NQU5EUykKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVz
dEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5l
cmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaWYgUExBVEZPUk0oV0VCX0NPTU1B
TkRTKQorY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjsKKyNlbmRpZiAv
LyBQTEFURk9STShXRUJfQ09NTUFORFMpCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCisKKyNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCitjbGFzcyBO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIH5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKyNlbmRpZiAvLyBQ
TEFURk9STShXRUJfQ09NTUFORFMpCisKKyNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCitjbGFz
cyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJh
Y2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJp
ZGU7Citwcml2YXRlOgorICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOworI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgorICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlz
cGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNw
YXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0K
K3ByaXZhdGU6CisgICAgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciogbV9hbHRl
cm5hdGVEaXNwYXRjaGVyIHsgbnVsbHB0ciB9OworI2VuZGlmCitwcml2YXRlOgorICAgIE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciopOworICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KiBtX2FnZW50IHsgbnVsbHB0ciB9OworfTsKKyNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFO
RFMpCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13
aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKKyNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCitOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6fk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9Cisj
ZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQorCisjaWYgUExBVEZPUk0oV0VCX0NPTU1B
TkRTKQorUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2Vu
dCkpOworfQorCitOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxp
dGVyYWwoIk5ldHdvcmsxIiksIHRoaXMpOworfQorCit2b2lkIE5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVm
PEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1z
IiksIHBhcmFtZXRlcnMpOworCisgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikKKyAg
ICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAg
ZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiTmV0d29y
azEiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKK30KKwordm9pZCBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCisgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShyZXF1ZXN0SWQpOworICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1f
YWdlbnQtPmxvYWRSZXNvdXJjZShlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZN
b3ZlKHJlc3VsdCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUo
ZXJyb3IpKTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUt
Z3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgRnJvbnRlbmRSb3V0ZXI7
CisKKyNpZiBQTEFURk9STShXRUJfRVZFTlRTKQorY2xhc3MgTmV0d29yazNGcm9udGVuZERpc3Bh
dGNoZXIgeworcHVibGljOgorICAgIE5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5k
Um91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVy
KSB7IH0KKyAgICB2b2lkIHJlc291cmNlTG9hZGVkKCk7Citwcml2YXRlOgorICAgIEZyb250ZW5k
Um91dGVyJiBtX2Zyb250ZW5kUm91dGVyOworfTsKKyNlbmRpZiAvLyBQTEFURk9STShXRUJfRVZF
TlRTKQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlu
cy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
KyNpZiBQTEFURk9STShXRUJfRVZFTlRTKQordm9pZCBOZXR3b3JrM0Zyb250ZW5kRGlzcGF0Y2hl
cjo6cmVzb3VyY2VMb2FkZWQoKQoreworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNz
YWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiTmV0d29yazMucmVzb3Vy
Y2VMb2FkZWQiKSk7CisKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOworfQorI2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9FVkVOVFMpCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZl
YXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9j
b2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworLy8gRm9yd2FyZCBkZWNsYXJh
dGlvbnMuCisjaWYgUExBVEZPUk0oV0VCX1RZUEVTKQorbmFtZXNwYWNlIE5ldHdvcmsyIHsKK2Ns
YXNzIE5ldHdvcmtFcnJvcjsKK30gLy8gTmV0d29yazIKKyNlbmRpZiAvLyBQTEFURk9STShXRUJf
VFlQRVMpCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworCisKKyNpZiBQTEFU
Rk9STShXRUJfVFlQRVMpCituYW1lc3BhY2UgTmV0d29yazIgeworY2xhc3MgTmV0d29ya0Vycm9y
IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAg
ZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEg
PDwgMCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0g
KE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAg
ICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypOZXR3b3JrRXJyb3IqL0luc3BlY3Rvck9i
amVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNT
ZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdl
U2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIpLCB2YWx1ZSk7CisgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2Nv
ZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoQVNDSUlM
aXRlcmFsKCJjb2RlIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29k
ZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxOZXR3b3JrRXJyb3I+IHJlbGVhc2Uo
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVs
ZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
c2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9j
YXN0KTsKKworICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1
bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVy
cHJldF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJnJlc3VsdCkpOworICAgICAgICB9CisgICAg
fTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxO
ZXR3b3JrRXJyb3I+IHJlc3VsdCA9IE5ldHdvcmtFcnJvcjo6Y3JlYXRlKCkKKyAgICAgKiAgICAg
LnNldE1lc3NhZ2UoLi4uKQorICAgICAqICAgICAuc2V0Q29kZSguLi4pCisgICAgICogICAgIC5y
ZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorfTsKKworfSAvLyBOZXR3b3JrMgorI2VuZGlmIC8v
IFBMQVRGT1JNKFdFQl9UWVBFUykKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3Rz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3Vh
cmRzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgVGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5k
bGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisjaWYgUExBVEZPUk0oV0VCX0NPTU1B
TkRTKQorY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6Cisg
ICAgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29s
TmV0d29yazFEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9
CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7
Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhh
bmRsZXI+PiBtX2RlbGVnYXRlOworfTsKKyNlbmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMp
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNr
ZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5l
cmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKKyNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCit2b2lkIE9iakNJbnNwZWN0
b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQp
Cit7CisgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKKyAgICB9OworCisgICAgaWQgc3VjY2Vzc0Nh
bGxiYWNrID0gXnsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJl
cXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfTsKKworICAgIFttX2Rl
bGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKKyNlbmRpZiAvLyBQTEFURk9STShXRUJf
Q09NTUFORFMpCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Z2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQ
cm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0Bp
bnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29yazFIYW5kbGVyOikgaWQ8VGVzdFBy
b3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBuZXR3b3JrMUhhbmRsZXI7CitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNw
YXRjaGVyICpuZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcjsKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdl
bmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5o
PgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxl
ciogX2NvbnRyb2xsZXI7CisgICAgaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVy
PiBfbmV0d29yazFIYW5kbGVyOworICAgIFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnRE
aXNwYXRjaGVyICpfbmV0d29yazNFdmVudERpc3BhdGNoZXI7Cit9CisKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29u
dHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxl
ciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYwor
eworICAgIFtfbmV0d29yazFIYW5kbGVyIHJlbGVhc2VdOworICAgIFtfbmV0d29yazNFdmVudERp
c3BhdGNoZXIgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNl
dE5ldHdvcmsxSGFuZGxlcjooaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPilo
YW5kbGVyCit7CisgICAgaWYgKGhhbmRsZXIgPT0gX25ldHdvcmsxSGFuZGxlcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgW19uZXR3b3JrMUhhbmRsZXIgcmVsZWFzZV07CisgICAgX25ldHdvcmsx
SGFuZGxlciA9IFtoYW5kbGVyIHJldGFpbl07CisKKyAgICBhdXRvIGFsdGVybmF0ZURpc3BhdGNo
ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gc3RkOjptYWtlX3VuaXF1
ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyLCBB
bHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPj4oQVNDSUlMaXRlcmFsKCJOZXR3b3Jr
MSIpLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9j
b250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30K
KworLSAoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiluZXR3b3JrMUhhbmRs
ZXIKK3sKKyAgICByZXR1cm4gX25ldHdvcmsxSGFuZGxlcjsKK30KKworLSAoVGVzdFByb3RvY29s
TmV0d29yazNEb21haW5FdmVudERpc3BhdGNoZXIgKiluZXR3b3JrM0V2ZW50RGlzcGF0Y2hlcgor
eworICAgIGlmICghX25ldHdvcmszRXZlbnREaXNwYXRjaGVyKQorICAgICAgICBfbmV0d29yazNF
dmVudERpc3BhdGNoZXIgPSBbW1Rlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluRXZlbnREaXNwYXRj
aGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xsZXJdOworICAgIHJldHVybiBf
bmV0d29yazNFdmVudERpc3BhdGNoZXI7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBn
ZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9j
b2xOZXR3b3JrM0RvbWFpbkV2ZW50RGlzcGF0Y2hlcgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcjsK
K3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xsZXIgPSBjb250
cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXJlc291cmNlTG9hZGVkCit7
CisgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVu
ZFJvdXRlcigpOworCisgICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCIp
KTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9
CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMu
bW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJy
b3I7CisKKworCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGlu
dGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrMk5ldHdvcmtFcnJvciA6IFJXSVByb3RvY29sSlNP
Tk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5T
U3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2Jq
ZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGNvZGU6KGludCljb2RlOworLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdl
OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7
CitAZW5kCisKK0Bwcm90b2NvbCBUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXIgPE5T
T2JqZWN0PgorQHJlcXVpcmVkCistICh2b2lkKWxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
KHZvaWQoXikoKSlzdWNjZXNzQ2FsbGJhY2s7CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2li
aWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFp
bkV2ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0CistICh2b2lkKXJlc291cmNlTG9hZGVkOworQGVu
ZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBn
ZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmgiCisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbE5l
dHdvcmszRG9tYWluRXZlbnREaXNwYXRjaGVyIChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9yOjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xs
ZXIqKWNvbnRyb2xsZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRl
cm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGdlbmVyYXRlLWRvbWFpbnMtd2l0aC1m
ZWF0dXJlLWd1YXJkcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sQXJyYXlDb252ZXJzaW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgT2JqQ0VudW1UeXBlPgorT2JqQ0VudW1UeXBlIGZyb21Qcm90b2Nv
bFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKTsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFy
ZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJz
ZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrMkRvbWFpbikKKworKyAodm9pZClfcGFyc2VOZXR3
b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMgKE5ldHdvcmsyRG9tYWluKQorCisrICh2b2lkKV9wYXJzZU5l
dHdvcmtFcnJvcjooVGVzdFByb3RvY29sTmV0d29yazJOZXR3b3JrRXJyb3IgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9U
WVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rl
c3RQcm90b2NvbE5ldHdvcmsyTmV0d29ya0Vycm9yIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5
bG9hZF07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBnZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVy
ZS1ndWFyZHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5z
cGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3Rv
Y29sTmV0d29yazJOZXR3b3JrRXJyb3IKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9h
ZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AibWVzc2FnZSJd
LCBAIm1lc3NhZ2UiKTsKKyAgICBzZWxmLm1lc3NhZ2UgPSBwYXlsb2FkW0AibWVzc2FnZSJdOwor
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiY29k
ZSJdLCBAImNvZGUiKTsKKyAgICBzZWxmLmNvZGUgPSBbcGF5bG9hZFtAImNvZGUiXSBpbnRlZ2Vy
VmFsdWVdOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhK
U09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Cit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0lu
c3BlY3Rvck9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVy
biBzZWxmOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhNZXNzYWdlOihOU1N0cmluZyAq
KW1lc3NhZ2UgY29kZTooaW50KWNvZGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRd
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUFJPUEVSVFkobWVzc2FnZSwgQCJtZXNzYWdlIik7CisKKyAgICBzZWxmLm1lc3NhZ2UgPSBt
ZXNzYWdlOworICAgIHNlbGYuY29kZSA9IGNvZGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAodm9pZClzZXRNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKK3sKKyAgICBbc3VwZXIgc2V0
U3RyaW5nOm1lc3NhZ2UgZm9yS2V5OkAibWVzc2FnZSJdOworfQorCistIChOU1N0cmluZyAqKW1l
c3NhZ2UKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm1lc3NhZ2UiXTsKK30K
KworLSAodm9pZClzZXRDb2RlOihpbnQpY29kZQoreworICAgIFtzdXBlciBzZXRJbnRlZ2VyOmNv
ZGUgZm9yS2V5OkAiY29kZSJdOworfQorCistIChpbnQpY29kZQoreworICAgIHJldHVybiBbc3Vw
ZXIgaW50ZWdlckZvcktleTpAImNvZGUiXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZm
ZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjhmNjg3MmNmYzk0MmU1NzRjODM3ZmJjNzI3
OGMwYTgzN2I0YjYzYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZm
ZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsODc5IEBACisjIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNr
ZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1p
ZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAg
ICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBk
aXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9
CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFj
a2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWlu
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBF
cnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10
eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitj
bGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5k
IEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRp
ZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90
b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisKKworLy8gVHlwZWRlZnMu
CituYW1lc3BhY2UgUnVudGltZSB7CisvKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuICovCit0
eXBlZGVmIFN0cmluZyBSZW1vdGVPYmplY3RJZDsKK30gLy8gUnVudGltZQorCituYW1lc3BhY2Ug
UnVudGltZTIgeworLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBTdHJp
bmcgUmVtb3RlT2JqZWN0SWQ7Cit9IC8vIFJ1bnRpbWUyCisvLyBFbmQgb2YgdHlwZWRlZnMuCisK
KworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVz
cGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
SW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29s
Lmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVz
dFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVy
KiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjoo
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
QVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2Nd
OworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9u
Lm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNp
bXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3QuaD4KKwor
CisKKworCisKKworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNh
bWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxX
ZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPYmpDRW51bVR5
cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKKworCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlm
ZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZVBhcnNlci5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGludGVyZmFj
ZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQp
X3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkOworCitAZW5kCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoUnVudGltZTJEb21haW4pCisKKysgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3Ry
aW5nICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCisK
KysgKHZvaWQpX3BhcnNlUmVtb3RlT2JqZWN0SWQ6KE5TU3RyaW5nICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNTdHJpbmcgKilw
YXlsb2FkOworfQorCitAZW5kCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zIChSdW50aW1lMkRvbWFpbikKKworKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDoo
TlNTdHJpbmcgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAg
ICpvdXRWYWx1ZSA9IChOU1N0cmluZyAqKXBheWxvYWQ7Cit9CisKK0BlbmQKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTog
VGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFBy
b3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5o
PgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW1wb3J0IDx3
dGYvQXNzZXJ0aW9ucy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKworCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQv
c2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hhZG93
ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViNjkyMDkz
YzFlYjAyOTZkZjk0MjM0YjMwYmQyODU3ZDBmMjViZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwx
MDg3IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0
ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKyMjIyBF
bmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRy
PEJhY2tlbmREaXNwYXRjaGVyPiYmIGRpc3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9
IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERp
c3BhdGNoZXIoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citw
cml2YXRlOgorICAgIFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hl
cjsKK307CisKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93
ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAor
CisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNp
bmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFBy
b3RvY29sIHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgUnVudGltZSB7
CitjbGFzcyBLZXlQYXRoOworfSAvLyBSdW50aW1lCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJh
dGlvbnMuCisKKworCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRFbnVt
Q29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51bUNv
bnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIFJ1bnRpbWUgeworLyogS2V5IHBhdGguICov
CitjbGFzcyBLZXlQYXRoIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7
CitwdWJsaWM6CisgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUg
Z2VuZXJhdGluZyBLZXlQYXRoLgorICAgIGVudW0gY2xhc3MgVHlwZSB7CisgICAgICAgIE51bGwg
PSAwLAorICAgICAgICBTdHJpbmcgPSAxLAorICAgICAgICBBcnJheSA9IDIsCisgICAgfTsgLy8g
ZW51bSBjbGFzcyBUeXBlCisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAg
ICAgICAgVHlwZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKFR5cGVTZXQp
CisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsK
KyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsK
KworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWls
ZGVyKFJlZjwvKktleVBhdGgqL0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAg
ICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEtleVBhdGg7Cisg
ICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShU
eXBlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInR5cGUiKSwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBSZWY8
S2V5UGF0aD4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChzaXplb2YoS2V5UGF0aCkgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVj
dCksIGNhbm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEZN
b3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxLZXlQYXRoPio+KCZyZXN1bHQpKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAg
KiBSZWY8S2V5UGF0aD4gcmVzdWx0ID0gS2V5UGF0aDo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNl
dFR5cGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKworICAg
IHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBJbnNw
ZWN0b3JPYmplY3RCYXNlOjpzZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzdHJpbmciKSwgdmFsdWUp
OworICAgIH0KKworICAgIHZvaWQgc2V0QXJyYXkoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PFN0cmluZz4+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFz
ZTo6c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhcnJheSIpLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAg
fQorfTsKKworfSAvLyBSdW50aW1lCisKKworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgorc3RkOjpvcHRpb25hbDxQcm90b2Nv
bEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKKy8v
IEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCit0ZW1wbGF0ZTw+CitzdGQ6Om9wdGlvbmFs
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBl
Pihjb25zdCBTdHJpbmcmKTsKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworfSAvLyBu
YW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
T2JqZWN0cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1v
cHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3Rv
Y29sIHsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgIm51bGwiLAorICAgICJzdHJpbmci
LAorICAgICJhcnJheSIsCit9OworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNv
ZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKy8vIEVu
dW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCit0ZW1wbGF0ZTw+CitzdGQ6Om9wdGlvbmFsPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihj
b25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
Y29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpOdWxsLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6OlN0cmluZywKKyAgICAgICAgKHNp
emVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpBcnJheSwK
KyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQorICAgICAgICBpZiAo
cHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1d
KQorICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQ
YXRoOjpUeXBlKWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
K30KKworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAvLyBuYW1lc3BhY2Ug
UHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93
ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKwor
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1
ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgi
ZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2Jq
ZWN0CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKworI2lt
cG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0
Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKwor
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdtZW50
YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNv
bnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRyb2xs
ZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MK
K3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRl
c3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
aGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVy
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJ
UHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQ
YXRoOworCisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbFJ1bnRpbWVL
ZXlQYXRoVHlwZSkgeworICAgIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZU51bGwsCisg
ICAgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlU3RyaW5nLAorICAgIFRlc3RQcm90b2Nv
bFJ1bnRpbWVLZXlQYXRoVHlwZUFycmF5LAorfTsKKworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmls
aXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sUnVudGltZUtleVBhdGgg
OiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6
KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRo
VHlwZSl0eXBlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikg
VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlIHR5cGU7CisvKiBvcHRpb25hbCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKnN0cmluZzsKKy8qIG9wdGlvbmFsICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFycmF5
OworQGVuZAorCisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFk
b3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdl
Ykluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09iakNFbnVtVHlw
ZSBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKworaW5saW5lIFN0
cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSB2YWx1
ZSkKK3sKKyAgICBzd2l0Y2godmFsdWUpIHsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVL
ZXlQYXRoVHlwZU51bGw6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIm51bGwiKTsKKyAg
ICBjYXNlIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZVN0cmluZzoKKyAgICAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgic3RyaW5nIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1l
S2V5UGF0aFR5cGVBcnJheToKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYXJyYXkiKTsK
KyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0
aFR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYg
KHZhbHVlID09ICJudWxsIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQ
YXRoVHlwZU51bGw7CisgICAgaWYgKHZhbHVlID09ICJzdHJpbmciKQorICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlU3RyaW5nOworICAgIGlmICh2YWx1ZSA9PSAi
YXJyYXkiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlQXJy
YXk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFRlc3RQcm90b2NvbFJ1
bnRpbWVLZXlQYXRoVHlwZU51bGw7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChSdW50aW1lRG9tYWluKQorCisrICh2b2lkKV9wYXJzZUtleVBhdGg6KFRlc3RQcm90b2Nv
bFJ1bnRpbWVLZXlQYXRoICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworCitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRp
bWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlS2V5UGF0aDooVGVzdFByb3RvY29sUnVudGltZUtl
eVBhdGggKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAg
ICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoIGFsbG9jXSBpbml0V2l0
aFBheWxvYWQ6cGF5bG9hZF07Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25h
bC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFs
LmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8
V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCitAaW1wbGVtZW50YXRpb24gVGVz
dFByb3RvY29sUnVudGltZUtleVBhdGgKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9h
ZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidHlwZSJdLCBA
InR5cGUiKTsKKyAgICBzZWxmLnR5cGUgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29s
UnVudGltZUtleVBhdGhUeXBlPihwYXlsb2FkW0AidHlwZSJdKTsKKworICAgIHNlbGYuc3RyaW5n
ID0gcGF5bG9hZFtAInN0cmluZyJdOworCisgICAgc2VsZi5hcnJheSA9IG9iamNBcnJheUZyb21Q
YXlsb2FkPE5TU3RyaW5nPihwYXlsb2FkW0AiYXJyYXkiXSk7CisKKyAgICByZXR1cm4gc2VsZjsK
K30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKWpzb25PYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoSW5z
cGVjdG9yT2JqZWN0Oltqc29uT2JqZWN0IHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV0pKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFR5cGU6KFRlc3RQcm90b2NvbFJ1bnRpbWVLZXlQYXRoVHlwZSl0eXBlCit7Cisg
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICBzZWxmLnR5cGUgPSB0eXBlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0
VHlwZTooVGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlKXR5cGUKK3sKKyAgICBbc3VwZXIg
c2V0U3RyaW5nOnRvUHJvdG9jb2xTdHJpbmcodHlwZSkgZm9yS2V5OkAidHlwZSJdOworfQorCist
IChUZXN0UHJvdG9jb2xSdW50aW1lS2V5UGF0aFR5cGUpdHlwZQoreworICAgIHJldHVybiBmcm9t
UHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sUnVudGltZUtleVBhdGhUeXBlPihbc3VwZXIgc3Ry
aW5nRm9yS2V5OkAidHlwZSJdKTsKK30KKworLSAodm9pZClzZXRTdHJpbmc6KE5TU3RyaW5nICop
c3RyaW5nCit7CisgICAgW3N1cGVyIHNldFN0cmluZzpzdHJpbmcgZm9yS2V5OkAic3RyaW5nIl07
Cit9CisKKy0gKE5TU3RyaW5nICopc3RyaW5nCit7CisgICAgcmV0dXJuIFtzdXBlciBzdHJpbmdG
b3JLZXk6QCJzdHJpbmciXTsKK30KKworLSAodm9pZClzZXRBcnJheTooTlNBcnJheS8qPE5TU3Ry
aW5nPiovICopYXJyYXkKK3sKKyAgICBbc3VwZXIgc2V0SW5zcGVjdG9yQXJyYXk6aW5zcGVjdG9y
U3RyaW5nQXJyYXkoYXJyYXkpIGZvcktleTpAImFycmF5Il07Cit9CisKKy0gKE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKWFycmF5Cit7CisgICAgcmV0dXJuIG9iamNTdHJpbmdBcnJheShbc3VwZXIg
aW5zcGVjdG9yQXJyYXlGb3JLZXk6QCJhcnJheSJdKTsKK30KKworQGVuZAorCisKKyMjIyBFbmQg
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFy
YXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
YTllNmJkOGViOTg1ODU1NDQyNjhiY2I3NTIyZjg3ZjkyM2M3NjliCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVz
dWx0CkBAIC0wLDAgKzEsODU2IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRz
LmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFz
ZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAg
IHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIoUmVmUHRyPEJhY2tlbmREaXNwYXRjaGVyPiYmIGRp
c3BhdGNoZXIpIHsgbV9iYWNrZW5kRGlzcGF0Y2hlciA9IFdURk1vdmUoZGlzcGF0Y2hlcik7IH0K
KyAgICBCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmREaXNwYXRjaGVyLmdldCgpOyB9Citwcml2YXRlOgorICAgIFJlZlB0cjxCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKK307CisKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCisjIyMgRW5kIEZpbGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1p
dGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMj
IEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKKyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisj
ZW5kaWYKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91dGVyOworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2
ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBl
cy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKKy8vIFR5cGVkZWZzLgorbmFtZXNw
YWNlIFJ1bnRpbWUgeworLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBp
bnQgUmVtb3RlT2JqZWN0SWQ7Cit9IC8vIFJ1bnRpbWUKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKwor
CisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xP
YmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisK
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUt
dHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
LmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvclZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJz
Lm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJp
bWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uIDogTlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJh
dGlvbi5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29u
ZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRy
b2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEF1Z21lbnRh
YmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgoreworICAgIHNlbGYgPSBbc3VwZXIg
aW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChj
b250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNl
bGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKwor
QGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05P
YmplY3QuaD4KKworCisKKworCisKKworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmlt
aXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSlNPTk9i
amVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVz
Lmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFy
cmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIE9iakNFbnVtVHlwZT4KK09iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSk7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVD
b252ZXJzaW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJ
ZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoUnVudGltZURv
bWFpbikKKworKyAodm9pZClfcGFyc2VSZW1vdGVPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFs
dWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU051
bWJlciAqKXBheWxvYWQ7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMu
bW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFs
aWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbElu
dGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2lt
cG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorI2ltcG9ydCA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworIyMjIEVuZCBG
aWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJh
dGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJh
eS10eXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI4Zjg5YTk1ODY3YjNiNTUwNzUxN2FmM2Qz
M2E3Y2JjN2Y1MWZkNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwxMDIzIEBACisjIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRGVidWdnZXIuCitJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRW51bSgiRGVidWdnZXIuUmVhc29uIiwge0RpZWQ6ICJEaWVkIiwgRmFpbnRl
ZDogIkZhaW50ZWQiLCBIdW5ncnk6ICJIdW5ncnkifSk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoK
KyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4m
JiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIp
OyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQdHI8
QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlw
ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAi
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFz
cyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJy
YXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlw
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25z
LgorbmFtZXNwYWNlIERlYnVnZ2VyIHsKK2VudW0gY2xhc3MgUmVhc29uOworfSAvLyBEZWJ1Z2dl
cgorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKy8vIFR5cGVkZWZzLgorbmFt
ZXNwYWNlIERlYnVnZ2VyIHsKK3R5cGVkZWYgaW50IEJyZWFrcG9pbnRJZDsKK30gLy8gRGVidWdn
ZXIKKworbmFtZXNwYWNlIFJ1bnRpbWUgewordHlwZWRlZiBpbnQgT2JqZWN0SWQ7Cit0eXBlZGVm
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PGludD4gTHVja3lOdW1iZXJzOwordHlwZWRlZiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+IEJhYnlOYW1lczsKK3R5cGVkZWYgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6T2Jq
ZWN0SWQ+IE5ld09iamVjdHM7Cit0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQ+IE9sZE9iamVjdHM7Cit0
eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpSZWFzb24+IFN0b3BSZWFzb25zOworfSAvLyBSdW50aW1lCisvLyBFbmQgb2YgdHlw
ZWRlZnMuCisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7CisKK1N0cmluZyBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVt
Q29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50
VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
VGVzdEhlbHBlcnMKKworbmFtZXNwYWNlIERlYnVnZ2VyIHsKKy8qICAqLworZW51bSBjbGFzcyBS
ZWFzb24geworICAgIERpZWQgPSAwLAorICAgIEZhaW50ZWQgPSAxLAorICAgIEh1bmdyeSA9IDIs
Cit9OyAvLyBlbnVtIGNsYXNzIFJlYXNvbgorfSAvLyBEZWJ1Z2dlcgorCisKKworbmFtZXNwYWNl
IFRlc3RIZWxwZXJzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgUHJvdG9jb2xFbnVtVHlwZT4KK3N0
ZDo6b3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNv
bnN0IFN0cmluZyYpOworCisvLyBFbnVtcyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21haW4KK3RlbXBs
YXRlPD4KK3N0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNv
bj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpSZWFzb24+KGNvbnN0IFN0cmluZyYpOworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwor
Cit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMj
IyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2Ug
UHJvdG9jb2wgeworCituYW1lc3BhY2UgVGVzdEhlbHBlcnMgeworCitzdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAiRGllZCIsCisgICAgIkZh
aW50ZWQiLAorICAgICJIdW5ncnkiLAorfTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVl
KGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQor
CisvLyBFbnVtcyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21haW4KK3RlbXBsYXRlPD4KK3N0ZDo6b3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+KGNvbnN0
IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25z
dGFudFZhbHVlc1tdID0geworICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpSZWFzb246OkRpZWQsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGVidWdnZXI6OlJlYXNvbjo6RmFpbnRlZCwKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6
OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpIdW5ncnksCisgICAgfTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVu
dW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVy
biAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbiljb25zdGFudFZhbHVlc1tp
XTsKKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgVGVz
dEhlbHBlcnMKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgi
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xC
YWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZp
Z3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9UZXN0UHJvdG9jb2wuaD4KKworX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCitAaW50ZXJmYWNlIFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24gOiBOU09iamVjdAorQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbi5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0
aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsK
K30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNw
ZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsK
KyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xs
ZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZh
bHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTog
VGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2Vi
SW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKworCisKK3R5cGVkZWYgTlNf
RU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uKSB7CisgICAgVGVzdFBy
b3RvY29sRGVidWdnZXJSZWFzb25EaWVkLAorICAgIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29u
RmFpbnRlZCwKKyAgICBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkh1bmdyeSwKK307CisKKwor
CisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbC5oIgorI2ltcG9y
dCAiVGVzdFByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sSW50ZXJuYWwuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4KK09iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisKKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29s
U3RyaW5nKFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uIHZhbHVlKQoreworICAgIHN3aXRjaCh2
YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25EaWVkOgorICAgICAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsKCJEaWVkIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xEZWJ1
Z2dlclJlYXNvbkZhaW50ZWQ6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkZhaW50ZWQi
KTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uSHVuZ3J5OgorICAgICAgICBy
ZXR1cm4gQVNDSUlMaXRlcmFsKCJIdW5ncnkiKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lu
bGluZSBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gIkRpZWQiKQorICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sRGVidWdnZXJSZWFzb25EaWVkOworICAgIGlmICh2YWx1ZSA9PSAiRmFp
bnRlZCIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xEZWJ1Z2dlclJlYXNvbkZhaW50ZWQ7
CisgICAgaWYgKHZhbHVlID09ICJIdW5ncnkiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29s
RGVidWdnZXJSZWFzb25IdW5ncnk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIFRlc3RQcm90b2NvbERlYnVnZ2VyUmVhc29uRGllZDsKK30KKworCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMubW0KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgor
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJz
ZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRl
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zIChEZWJ1Z2dlckRvbWFpbikKKworKyAodm9pZClfcGFyc2VCcmVh
a3BvaW50SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwor
KyAodm9pZClfcGFyc2VSZWFzb246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkOworCitAZW5kCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VPYmplY3RJZDooTlNOdW1iZXIgKiop
b3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUx1Y2t5TnVt
YmVyczooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOworKyAodm9pZClfcGFyc2VCYWJ5TmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlTmV3T2Jq
ZWN0czooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOworKyAodm9pZClfcGFyc2VPbGRPYmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8g
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVN0b3BS
ZWFzb25zOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoRGVidWdnZXJEb21haW4pCisKKysgKHZvaWQpX3BhcnNlQnJlYWtwb2ludElkOihO
U051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TTnVtYmVyIGNsYXNzXSk7CisgICAg
Km91dFZhbHVlID0gKE5TTnVtYmVyICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VSZWFz
b246KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsK
KyAgICAqb3V0VmFsdWUgPSBAKEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90
b2NvbERlYnVnZ2VyUmVhc29uPihwYXlsb2FkKSk7Cit9CisKK0BlbmQKK0BpbXBsZW1lbnRhdGlv
biBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQp
X3BhcnNlT2JqZWN0SWQ6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNOdW1i
ZXIgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNOdW1iZXIgKilwYXlsb2FkOworfQorCisr
ICh2b2lkKV9wYXJzZUx1Y2t5TnVtYmVyczooTlNBcnJheS8qPE5TTnVtYmVyPiovICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TTnVtYmVyPiovIGNsYXNzXSk7CisgICAgKm91
dFZhbHVlID0gKE5TQXJyYXkvKjxOU051bWJlcj4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQp
X3BhcnNlQmFieU5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBh
eWxvYWQsIFtOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAo
TlNBcnJheS8qPE5TU3RyaW5nPiovICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VOZXdP
YmplY3RzOihOU0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtO
U0FycmF5Lyo8TlNOdW1iZXI+Ki8gY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8q
PE5TTnVtYmVyPiovICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VPbGRPYmplY3RzOihO
U0FycmF5Lyo8TlNOdW1iZXI+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
K3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8
TlNOdW1iZXI+Ki8gY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSAoTlNBcnJheS8qPE5TTnVtYmVy
PiovICopcGF5bG9hZDsKK30KKworKyAodm9pZClfcGFyc2VTdG9wUmVhc29uczooTlNBcnJheS8q
PE5TU3RyaW5nPiovICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNBcnJheS8qPE5TU3RyaW5n
PiovIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKXBh
eWxvYWQ7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclZhbHVlcy5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
VHlwZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjBiNjgwMzI5ZGVlMzMzOTFjNTE0MGVlMTNhZTA2ZDY5OTdlOGE2MwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVz
dWx0CkBAIC0wLDAgKzEsMTAzMSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworLy8gUnVudGltZS4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJSdW50
aW1lLkZhcm1BbmltYWxzIiwge1BpZ3M6ICJQaWdzIiwgQ293czogIkNvd3MiLCBDYXRzOiAiQ2F0
cyIsIEhlbnM6ICJIZW5zIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlJ1bnRp
bWUuVHdvTGVnZ2VkQW5pbWFscyIsIHtEdWNrczogIkR1Y2tzIiwgSGVuczogIkhlbnMiLCBDcm93
czogIkNyb3dzIiwgRmxhbWluZ29zOiAiRmxhbWluZ29zIn0pOworIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKK3B1Ymxp
YzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlzcGF0Y2hl
cj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRpc3BhdGNo
ZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAgICBSZWZQ
dHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisKKworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10
eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBG
aWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNlbmRpZgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZp
bGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFz
cyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
IgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVt
LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
Lmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKKworCituYW1lc3BhY2UgUHJvdG9jb2wgeworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4K
K25hbWVzcGFjZSBSdW50aW1lIHsKK2VudW0gY2xhc3MgRmFybUFuaW1hbHM7CitlbnVtIGNsYXNz
IFR3b0xlZ2dlZEFuaW1hbHM7Cit9IC8vIFJ1bnRpbWUKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xh
cmF0aW9ucy4KKworCisKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5n
IGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRFbnVt
Q29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBUZXN0SGVscGVycworCituYW1lc3BhY2UgUnVudGltZSB7CisvKiAgKi8KK2VudW0g
Y2xhc3MgRmFybUFuaW1hbHMgeworICAgIFBpZ3MgPSAwLAorICAgIENvd3MgPSAxLAorICAgIENh
dHMgPSAyLAorICAgIEhlbnMgPSAzLAorfTsgLy8gZW51bSBjbGFzcyBGYXJtQW5pbWFscworLyog
ICovCitlbnVtIGNsYXNzIFR3b0xlZ2dlZEFuaW1hbHMgeworICAgIER1Y2tzID0gNCwKKyAgICBI
ZW5zID0gMywKKyAgICBDcm93cyA9IDUsCisgICAgRmxhbWluZ29zID0gNiwKK307IC8vIGVudW0g
Y2xhc3MgVHdvTGVnZ2VkQW5pbWFscworfSAvLyBSdW50aW1lCisKKworCituYW1lc3BhY2UgVGVz
dEhlbHBlcnMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBQcm90b2NvbEVudW1UeXBlPgorc3RkOjpv
cHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3Qg
U3RyaW5nJik7CisKKy8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCit0ZW1wbGF0ZTw+
CitzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxz
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
RmFybUFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwordGVtcGxhdGU8Pgorc3RkOjpvcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5p
bWFscz4oY29uc3QgU3RyaW5nJik7CisKK30gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCisKK30g
Ly8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3Rv
Y29sIHsKKworbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgIlBpZ3MiLAorICAgICJDb3dzIiwK
KyAgICAiQ2F0cyIsCisgICAgIkhlbnMiLAorICAgICJEdWNrcyIsCisgICAgIkNyb3dzIiwKKyAg
ICAiRmxhbWluZ29zIiwKK307CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29k
ZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51
bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KK3RlbXBsYXRlPD4KK3N0ZDo6b3B0aW9uYWw8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4oY29uc3Qg
U3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0
YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6RmFybUFuaW1hbHM6OlBpZ3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNvd3MsCisgICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNhdHMsCisgICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkhlbnMsCisgICAg
fTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYgKHByb3Rv
Y29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAg
ICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1h
bHMpY29uc3RhbnRWYWx1ZXNbaV07CisKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCit0
ZW1wbGF0ZTw+CitzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3
b0xlZ2dlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3Ry
aW5nKQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAg
ICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmlt
YWxzOjpEdWNrcywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpUd29MZWdnZWRBbmltYWxzOjpIZW5zLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkNyb3dzLAorICAgICAgICAoc2l6ZV90
KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkZsYW1pbmdv
cywKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICBp
ZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNb
aV1dKQorICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpU
d29MZWdnZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOworCisgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKK30KKworCit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCisKKworfSAvLyBuYW1l
c3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgor
CisKKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVz
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1Rlc3RQcm90b2NvbC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitA
ZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMj
IEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNo
ZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2Vu
dC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVj
dG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aENvbnRyb2xsZXI6KEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciopY29udHJvbGxlcgor
eworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIEFTU0VSVChjb250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRy
b2xsZXI7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtz
dXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
Q29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNw
YXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZlbnREaXNwYXRjaGVycy5t
bQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91
bmRhdGlvbi5oPgorCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0
Lmg+CisKKworCisKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sUnVu
dGltZUZhcm1BbmltYWxzKSB7CisgICAgVGVzdFByb3RvY29sUnVudGltZUZhcm1BbmltYWxzUGln
cywKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDb3dzLAorICAgIFRlc3RQcm90
b2NvbFJ1bnRpbWVGYXJtQW5pbWFsc0NhdHMsCisgICAgVGVzdFByb3RvY29sUnVudGltZUZhcm1B
bmltYWxzSGVucywKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90b2Nv
bFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzKSB7CisgICAgVGVzdFByb3RvY29sUnVudGltZVR3b0xl
Z2dlZEFuaW1hbHNEdWNrcywKKyAgICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFs
c0hlbnMsCisgICAgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNDcm93cywKKyAg
ICBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0ZsYW1pbmdvcywKK307CisKKwor
CisKKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0
ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJv
dG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisKK2lubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0
cmluZyhUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHMgdmFsdWUpCit7CisgICAgc3dpdGNo
KHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzOgor
ICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJQaWdzIik7CisgICAgY2FzZSBUZXN0UHJvdG9j
b2xSdW50aW1lRmFybUFuaW1hbHNDb3dzOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJD
b3dzIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDYXRzOgorICAg
ICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJDYXRzIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xS
dW50aW1lRmFybUFuaW1hbHNIZW5zOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJIZW5z
Iik7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgVGVzdFByb3RvY29sUnVudGltZUZh
cm1BbmltYWxzIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAg
IGlmICh2YWx1ZSA9PSAiUGlncyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1l
RmFybUFuaW1hbHNQaWdzOworICAgIGlmICh2YWx1ZSA9PSAiQ293cyIpCisgICAgICAgIHJldHVy
biBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDb3dzOworICAgIGlmICh2YWx1ZSA9PSAi
Q2F0cyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNDYXRz
OworICAgIGlmICh2YWx1ZSA9PSAiSGVucyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xS
dW50aW1lRmFybUFuaW1hbHNIZW5zOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBUZXN0UHJvdG9jb2xSdW50aW1lRmFybUFuaW1hbHNQaWdzOworfQorCitpbmxpbmUgU3Ry
aW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHMg
dmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xSdW50
aW1lVHdvTGVnZ2VkQW5pbWFsc0R1Y2tzOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJE
dWNrcyIpOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNIZW5z
OgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJIZW5zIik7CisgICAgY2FzZSBUZXN0UHJv
dG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0Nyb3dzOgorICAgICAgICByZXR1cm4gQVNDSUlM
aXRlcmFsKCJDcm93cyIpOworICAgIGNhc2UgVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFu
aW1hbHNGbGFtaW5nb3M6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkZsYW1pbmdvcyIp
OworICAgIH0KK30KKwordGVtcGxhdGU8PgoraW5saW5lIFRlc3RQcm90b2NvbFJ1bnRpbWVUd29M
ZWdnZWRBbmltYWxzIGZyb21Qcm90b2NvbFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorewor
ICAgIGlmICh2YWx1ZSA9PSAiRHVja3MiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVu
dGltZVR3b0xlZ2dlZEFuaW1hbHNEdWNrczsKKyAgICBpZiAodmFsdWUgPT0gIkhlbnMiKQorICAg
ICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGltZVR3b0xlZ2dlZEFuaW1hbHNIZW5zOworICAg
IGlmICh2YWx1ZSA9PSAiQ3Jvd3MiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sUnVudGlt
ZVR3b0xlZ2dlZEFuaW1hbHNDcm93czsKKyAgICBpZiAodmFsdWUgPT0gIkZsYW1pbmdvcyIpCisg
ICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xSdW50aW1lVHdvTGVnZ2VkQW5pbWFsc0ZsYW1pbmdv
czsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVGVzdFByb3RvY29sUnVu
dGltZVR3b0xlZ2dlZEFuaW1hbHNEdWNrczsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJl
Z2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBu
YW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJz
aW9ucyAoUnVudGltZURvbWFpbikKKworKyAodm9pZClfcGFyc2VGYXJtQW5pbWFsczooTlNOdW1i
ZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVR3
b0xlZ2dlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXls
b2FkOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMgKFJ1bnRpbWVEb21haW4pCisKKysgKHZvaWQpX3BhcnNlRmFybUFuaW1hbHM6KE5TTnVtYmVy
ICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKKyAgICAqb3V0VmFs
dWUgPSBAKEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFJ1bnRpbWVG
YXJtQW5pbWFscz4ocGF5bG9hZCkpOworfQorCisrICh2b2lkKV9wYXJzZVR3b0xlZ2dlZEFuaW1h
bHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsK
KyAgICAqb3V0VmFsdWUgPSBAKEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90
b2NvbFJ1bnRpbWVUd29MZWdnZWRBbmltYWxzPihwYXlsb2FkKSk7Cit9CisKK0BlbmQKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorCisjIyMgQmVnaW4g
RmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVz
dFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW1wb3J0
IDx3dGYvQXNzZXJ0aW9ucy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKwor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVzLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90
eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YjAzMzEyZmUyYjA1
M2ZhOGViYzRjYjE1ZjBjMWRmZTI5MDI0MzVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDE5ODEgQEAK
KyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKyMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVz
LmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsK
K3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxCYWNrZW5kRGlz
cGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBXVEZNb3ZlKGRp
c3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJpdmF0ZToKKyAg
ICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Cit9OworCisK
KworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
b2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVk
ZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisj
IyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KyNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCisjZW5kaWYKKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIkluc3BlY3RvckZy
b250ZW5kUm91dGVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJv
dG9jb2xPYmplY3RzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yUHJvdG9jb2xUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworLy8gRm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgRGF0YWJhc2UgeworY2xhc3MgRXJyb3I7CitjbGFz
cyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKK2NsYXNzIFBhcmFtZXRlckJ1bmRsZTsKK2NsYXNz
IE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM7CitjbGFzcyBEdW1teU9iamVjdDsKK30g
Ly8gRGF0YWJhc2UKKworbmFtZXNwYWNlIFRlc3QgeworY2xhc3MgUGFyYW1ldGVyQnVuZGxlOwor
fSAvLyBUZXN0CisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworLy8gVHlwZWRl
ZnMuCituYW1lc3BhY2UgRGF0YWJhc2UgewordHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IEVycm9yTGlzdDsKK30g
Ly8gRGF0YWJhc2UKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworbmFtZXNwYWNlIERhdGFiYXNlIHsK
Ky8qIERhdGFiYXNlIGVycm9yLiAqLworY2xhc3MgRXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAorICAgICAgICBDb2RlU2V0
ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQp
CisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsK
KyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsK
KworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWls
ZGVyKFJlZjwvKkVycm9yKi9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAg
OiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKKyAgICBw
dWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIp
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Cisg
ICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
Q29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJjb2RlIiksIHZhbHVlKTsKKyAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZjxF
cnJvcj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBj
YW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgq
cmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJnJlc3VsdCkpOworICAgICAgICB9CisgICAg
fTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxF
cnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdlKC4u
LikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAg
ICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCkpOworICAgIH0KK307CisKK2NsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIDogcHVibGlj
IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7Cisg
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gMAorICAgIH07
CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJp
dmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8
LypPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAg
ICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgT3B0
aW9uYWxQYXJhbWV0ZXJCdW5kbGU7CisgICAgcHVibGljOgorCisgICAgICAgIFJlZjxPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUp
ID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7
CisgICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8T3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGU+Kj4oJnJlc3VsdCkpOworICAgICAgICB9CisgICAgfTsKKworICAg
IC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgp
CisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRD
b2x1bW5OYW1lcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gdmFs
dWUpCisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRBcnJheShBU0NJSUxp
dGVyYWwoImNvbHVtbk5hbWVzIiksIFdURk1vdmUodmFsdWUpKTsKKyAgICB9CisKKyAgICB2b2lk
IHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBJbnNwZWN0b3JP
YmplY3RCYXNlOjpzZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCB2YWx1ZSk7CisgICAg
fQorCisgICAgdm9pZCBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
SW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0RG91YmxlKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiks
IHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFZhbHVlcyhSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFz
ZTo6c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIFdURk1vdmUodmFsdWUpKTsKKyAg
ICB9CisKKyAgICB2b2lkIHNldFBheWxvYWQoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWU+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0VmFsdWUo
QVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIFdURk1vdmUodmFsdWUpKTsKKyAgICB9CisKKyAgICB2
b2lkIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
IHZhbHVlKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgiZXJyb3IiKSwgV1RGTW92ZSh2YWx1ZSkpOworICAgIH0KKworICAgIHZvaWQg
c2V0RXJyb3JMaXN0KFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3JM
aXN0PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldEFycmF5
KEFTQ0lJTGl0ZXJhbCgiZXJyb3JMaXN0IiksIFdURk1vdmUodmFsdWUpKTsKKyAgICB9Cit9Owor
CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAor
ICAgICAgICBDb2x1bW5OYW1lc1NldCA9IDEgPDwgMCwKKyAgICAgICAgTm90ZXNTZXQgPSAxIDw8
IDEsCisgICAgICAgIFRpbWVzdGFtcFNldCA9IDEgPDwgMiwKKyAgICAgICAgVmFsdWVzU2V0ID0g
MSA8PCAzLAorICAgICAgICBQYXlsb2FkU2V0ID0gMSA8PCA0LAorICAgICAgICBFcnJvclNldCA9
IDEgPDwgNSwKKyAgICAgICAgRXJyb3JMaXN0U2V0ID0gMSA8PCA2LAorICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoQ29sdW1uTmFtZXNTZXQgfCBOb3Rlc1NldCB8IFRpbWVzdGFtcFNldCB8IFZhbHVl
c1NldCB8IFBheWxvYWRTZXQgfCBFcnJvclNldCB8IEVycm9yTGlzdFNldCkKKyAgICB9OworCisg
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6
CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRF
IHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qUGFy
YW1ldGVyQnVuZGxlKi9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBt
X3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7
CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4m
IHNldENvbHVtbk5hbWVzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+
PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IENvbHVtbk5hbWVzU2V0KSwgcHJvcGVydHlfY29sdW1uTmFtZXNfYWxyZWFkeV9zZXQpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwg
dmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2x1bW5OYW1lc1NldD4oKTsK
KyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVz
KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBOb3Rlc1NldCksIHByb3BlcnR5X25vdGVzX2FscmVhZHlfc2V0KTsKKyAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCB2YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0PigpOworICAgICAgICB9
CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChk
b3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBUaW1lc3RhbXBTZXQpLCBwcm9wZXJ0eV90aW1lc3RhbXBfYWxyZWFkeV9zZXQpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB2
YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMo
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3Zh
bHVlc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJ
TGl0ZXJhbCgidmFsdWVzIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
VmFsdWVzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxv
YWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxv
YWRTZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgdmFsdWUpOworICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJvclNldCksIHByb3BlcnR5X2Vycm9yX2FscmVhZHlf
c2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJlcnJv
ciIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0PigpOwor
ICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yTGlzdFNldD4mIHNldEVy
cm9yTGlzdChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yTGlzdD4g
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBF
cnJvckxpc3RTZXQpLCBwcm9wZXJ0eV9lcnJvckxpc3RfYWxyZWFkeV9zZXQpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiZXJyb3JMaXN0IiksIHZhbHVlKTsK
KyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JMaXN0U2V0PigpOworICAgICAgICB9
CisKKyAgICAgICAgUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUGFyYW1ldGVy
QnVuZGxlKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAg
ICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9u
TnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
PFBhcmFtZXRlckJ1bmRsZT4qPigmcmVzdWx0KSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
LyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPFBhcmFtZXRlckJ1
bmRsZT4gcmVzdWx0ID0gUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0
Q29sdW1uTmFtZXMoLi4uKQorICAgICAqICAgICAuc2V0Tm90ZXMoLi4uKQorICAgICAqICAgICAu
c2V0VGltZXN0YW1wKC4uLikKKyAgICAgKiAgICAgLnNldFZhbHVlcyguLi4pCisgICAgICogICAg
IC5zZXRQYXlsb2FkKC4uLikKKyAgICAgKiAgICAgLnNldEVycm9yKC4uLikKKyAgICAgKiAgICAg
LnNldEVycm9yTGlzdCguLi4pCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAg
c3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1
cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAg
fQorfTsKKworLyogQ29uZmxpY3RlZCBuYW1lcyBtYXkgY2F1c2UgZ2VuZXJhdGVkIGdldHRlcnMv
c2V0dGVycyB0byBjbGFzaCB3aXRoIGJ1aWx0LWluIEluc3BlY3Rvck9iamVjdCBtZXRob2RzLiAq
LworY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyA6IHB1YmxpYyBJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCisgICAgICAgIEludGVnZXJTZXQgPSAxIDw8IDAsCisgICAgICAgIEFy
cmF5U2V0ID0gMSA8PCAxLAorICAgICAgICBTdHJpbmdTZXQgPSAxIDw8IDIsCisgICAgICAgIFZh
bHVlU2V0ID0gMSA8PCAzLAorICAgICAgICBPYmplY3RTZXQgPSAxIDw8IDQsCisgICAgICAgIEFs
bEZpZWxkc1NldCA9IChJbnRlZ2VyU2V0IHwgQXJyYXlTZXQgfCBTdHJpbmdTZXQgfCBWYWx1ZVNl
dCB8IE9iamVjdFNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNs
YXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQor
CisgICAgICAgIEJ1aWxkZXIoUmVmPC8qT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyov
SW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92
ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAg
ICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0
czsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEludGVnZXJTZXQ+JiBz
ZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJbnRlZ2VyU2V0KSwgcHJvcGVydHlfaW50ZWdlcl9hbHJl
YWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
aW50ZWdlciIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEludGVnZXJT
ZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQXJyYXlTZXQ+JiBz
ZXRBcnJheShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgQXJyYXlTZXQpLCBwcm9wZXJ0eV9hcnJheV9hbHJlYWR5X3Nl
dCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiYXJyYXki
KSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxBcnJheVNldD4oKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFN0cmluZ1NldCksIHByb3BlcnR5X3N0cmluZ19hbHJlYWR5X3NldCk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic3RyaW5nIiksIHZh
bHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RyaW5nU2V0PigpOworICAgICAg
ICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlU2V0PiYgc2V0VmFsdWUoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFZhbHVlU2V0KSwgcHJvcGVydHlfdmFsdWVfYWxyZWFkeV9zZXQpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInZhbHVlIiksIHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVTZXQ+KCk7CisgICAgICAgIH0KKworICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgT2JqZWN0U2V0PiYgc2V0T2JqZWN0KGNvbnN0IFN0cmluZyYg
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBP
YmplY3RTZXQpLCBwcm9wZXJ0eV9vYmplY3RfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm9iamVjdCIpLCB2YWx1ZSk7CisgICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPE9iamVjdFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAg
IFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZWxlYXNlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihPYmpl
Y3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwg
Y2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUo
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+Kj4o
JnJlc3VsdCkpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3Rz
PiByZXN1bHQgPSBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOjpjcmVhdGUoKQorICAg
ICAqICAgICAuc2V0SW50ZWdlciguLi4pCisgICAgICogICAgIC5zZXRBcnJheSguLi4pCisgICAg
ICogICAgIC5zZXRTdHJpbmcoLi4uKQorICAgICAqICAgICAuc2V0VmFsdWUoLi4uKQorICAgICAq
ICAgICAuc2V0T2JqZWN0KC4uLikKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAg
ICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAg
ICB9Cit9OworCit9IC8vIERhdGFiYXNlCisKK25hbWVzcGFjZSBUZXN0IHsKK2NsYXNzIFBhcmFt
ZXRlckJ1bmRsZSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVi
bGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIENvbHVt
bk5hbWVzU2V0ID0gMSA8PCAwLAorICAgICAgICBOb3Rlc1NldCA9IDEgPDwgMSwKKyAgICAgICAg
VGltZXN0YW1wU2V0ID0gMSA8PCAyLAorICAgICAgICBWYWx1ZXNTZXQgPSAxIDw8IDMsCisgICAg
ICAgIFBheWxvYWRTZXQgPSAxIDw8IDQsCisgICAgICAgIEVycm9yU2V0ID0gMSA8PCA1LAorICAg
ICAgICBBbGxGaWVsZHNTZXQgPSAoQ29sdW1uTmFtZXNTZXQgfCBOb3Rlc1NldCB8IFRpbWVzdGFt
cFNldCB8IFZhbHVlc1NldCB8IFBheWxvYWRTZXQgfCBFcnJvclNldCkKKyAgICB9OworCisgICAg
dGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6Cisg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qUGFyYW1l
dGVyQnVuZGxlKi9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICAgICAgOiBtX3Jl
c3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7Cisg
ICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNl
dENvbHVtbk5hbWVzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiB2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENv
bHVtbk5hbWVzU2V0KSwgcHJvcGVydHlfY29sdW1uTmFtZXNfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgdmFs
dWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2x1bW5OYW1lc1NldD4oKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNv
bnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBOb3Rlc1NldCksIHByb3BlcnR5X25vdGVzX2FscmVhZHlfc2V0KTsKKyAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0PigpOworICAgICAgICB9CisK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChkb3Vi
bGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBUaW1lc3RhbXBTZXQpLCBwcm9wZXJ0eV90aW1lc3RhbXBfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB2YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVl
c19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0
ZXJhbCgidmFsdWVzIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFs
dWVzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRT
ZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxvYWRT
ZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgdmFsdWUpOworICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJvclNldCksIHByb3BlcnR5X2Vycm9yX2FscmVhZHlfc2V0
KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJlcnJvciIp
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0PigpOworICAg
ICAgICB9CisKKyAgICAgICAgUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUGFy
YW1ldGVyQnVuZGxlKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwor
CisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxl
YXNlTm9uTnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmPFBhcmFtZXRlckJ1bmRsZT4qPigmcmVzdWx0KSk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmPFBhcmFt
ZXRlckJ1bmRsZT4gcmVzdWx0ID0gUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAgICAqICAg
ICAuc2V0Q29sdW1uTmFtZXMoLi4uKQorICAgICAqICAgICAuc2V0Tm90ZXMoLi4uKQorICAgICAq
ICAgICAuc2V0VGltZXN0YW1wKC4uLikKKyAgICAgKiAgICAgLnNldFZhbHVlcyguLi4pCisgICAg
ICogICAgIC5zZXRQYXlsb2FkKC4uLikKKyAgICAgKiAgICAgLnNldEVycm9yKC4uLikKKyAgICAg
KiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCit9IC8vIFRlc3QKKworCisK
K30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMj
IEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2Ug
UHJvdG9jb2wgeworCisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5jcHAKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4K
KyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFj
a2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3Rv
Y29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xD
b25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2NvbC5oPgorCitf
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFBy
b3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2Nv
bENvbmZpZ3VyYXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisj
aW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25m
aWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJv
bGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNv
bnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitA
ZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMj
IyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3BhdGNoZXJzLm1tCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNv
bmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JWYWx1ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisjIyMgRW5k
IEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6
IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisjaW1w
b3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xKU09OT2JqZWN0Lmg+CisKKworQGNsYXNzIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3I7CitAY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VPcHRp
b25hbFBhcmFtZXRlckJ1bmRsZTsKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRl
ckJ1bmRsZTsKK0BjbGFzcyBUZXN0UHJvdG9jb2xEYXRhYmFzZU9iamVjdFdpdGhQcm9wZXJ0eU5h
bWVDb25mbGljdHM7CitAY2xhc3MgVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdDsKK0Bj
bGFzcyBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVuZGxlOworCisKKworCitfX2F0dHJpYnV0
ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciA6IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilq
c29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTWVzc2FnZTooTlNTdHJpbmcgKilt
ZXNzYWdlIGNvZGU6KGludCljb2RlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9t
aWMsIGNvcHkpIE5TU3RyaW5nICptZXNzYWdlOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChu
b25hdG9taWMsIGFzc2lnbikgaW50IGNvZGU7CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2li
aWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xEYXRhYmFzZU9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9h
ZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKWpzb25PYmplY3Q7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywg
Y29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lczsKKy8qIG9wdGlvbmFsICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbm90ZXM7CisvKiBvcHRpb25h
bCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBkb3VibGUgdGltZXN0YW1wOworLyog
b3B0aW9uYWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICp2YWx1ZXM7CisvKiBvcHRpb25hbCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0
YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQ7CisvKiBvcHRpb25hbCAqLyBAcHJv
cGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICplcnJv
cjsKKy8qIG9wdGlvbmFsICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqZXJyb3JMaXN0OworQGVuZAorCitfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29s
RGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGUgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilw
YXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbHVtbk5h
bWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcg
Kilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpT
T05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9h
ZCBlcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yIGVycm9yTGlzdDooTlNB
cnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3Q7CisvKiByZXF1
aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3RyaW5nPiov
ICpjb2x1bW5OYW1lczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5
KSBOU1N0cmluZyAqbm90ZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywg
YXNzaWduKSBkb3VibGUgdGltZXN0YW1wOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25h
dG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXM7CisvKiByZXF1aXJl
ZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05PYmplY3Qg
KnBheWxvYWQ7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICplcnJvcjsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBjb3B5KSBOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4q
LyAqZXJyb3JMaXN0OworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVs
dCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRoUHJvcGVydHlO
YW1lQ29uZmxpY3RzIDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICopcGF5bG9hZDsKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJbnRlZ2VyOihOU1N0cmluZyAq
KWludGVnZXIgYXJyYXk6KE5TU3RyaW5nICopYXJyYXkgc3RyaW5nOihOU1N0cmluZyAqKXN0cmlu
ZyB2YWx1ZTooTlNTdHJpbmcgKil2YWx1ZSBvYmplY3Q6KE5TU3RyaW5nICopb2JqZWN0OworLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICppbnRlZ2Vy
OworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICph
cnJheTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmlu
ZyAqc3RyaW5nOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5T
U3RyaW5nICp2YWx1ZTsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5
KSBOU1N0cmluZyAqb2JqZWN0OworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgi
ZGVmYXVsdCIpKSkKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sRGF0YWJhc2VEdW1teU9iamVjdCA6
IFJXSVByb3RvY29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoo
TlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Owor
QGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZh
Y2UgVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZSA6IFJXSVByb3RvY29sSlNPTk9iamVj
dAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9uYXJ5PE5TU3RyaW5n
ICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihS
V0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVz
OihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKilwYXlsb2FkIGVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3I7Cisv
KiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNBcnJheS8qPE5TU3Ry
aW5nPiovICpjb2x1bW5OYW1lczsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBjb3B5KSBOU1N0cmluZyAqbm90ZXM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgYXNzaWduKSBkb3VibGUgdGltZXN0YW1wOworLyogcmVxdWlyZWQgKi8gQHByb3BlcnR5
IChub25hdG9taWMsIHJldGFpbikgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXM7CisvKiBy
ZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluKSBSV0lQcm90b2NvbEpTT05P
YmplY3QgKnBheWxvYWQ7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0
YWluKSBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICplcnJvcjsKK0BlbmQKKworCisKKworCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEludGVybmFsLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xKU09OT2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JWYWx1ZXMuaD4KKworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5h
bC5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFy
cmF5Q29udmVyc2lvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIE9iakNFbnVtVHlwZT4KK09iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSk7CisKKworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2lu
IEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2wuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQg
PFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNp
b25zIChEYXRhYmFzZURvbWFpbikKKworKyAodm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZv
aWQpX3BhcnNlRXJyb3JMaXN0OihOU0FycmF5Lyo8VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4q
LyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZvaWQpX3BhcnNlT3B0
aW9uYWxQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9w
YXJzZVBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGUg
Kiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZU9iamVj
dFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM6KFRlc3RQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0
aFByb3BlcnR5TmFtZUNvbmZsaWN0cyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKKysgKHZvaWQpX3BhcnNlRHVtbXlPYmplY3Q6KFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlP
YmplY3QgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKK0BpbnRl
cmZhY2UgVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUZXN0RG9tYWluKQorCisrICh2b2lk
KV9wYXJzZVBhcmFtZXRlckJ1bmRsZTooVGVzdFByb3RvY29sVGVzdFBhcmFtZXRlckJ1bmRsZSAq
KilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50
YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChEYXRhYmFzZURvbWFpbikKKworKyAo
dm9pZClfcGFyc2VFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilvdXRWYWx1ZSBm
cm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZ
UEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOwor
fQorCisrICh2b2lkKV9wYXJzZUVycm9yTGlzdDooTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3I+Ki8gKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0FycmF5Lyo8VGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvcj4qLyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU0FycmF5Lyo8
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvcj4qLyAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3Bh
cnNlT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQ
YXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xh
c3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlT3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGUgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworKyAodm9p
ZClfcGFyc2VQYXJhbWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbERhdGFiYXNlUGFyYW1ldGVyQnVu
ZGxlICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfVFlQRShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAg
Km91dFZhbHVlID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZVBhcmFtZXRlckJ1bmRsZSBhbGxvY10g
aW5pdFdpdGhQYXlsb2FkOnBheWxvYWRdOworfQorCisrICh2b2lkKV9wYXJzZU9iamVjdFdpdGhQ
cm9wZXJ0eU5hbWVDb25mbGljdHM6KFRlc3RQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3Bl
cnR5TmFtZUNvbmZsaWN0cyAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAorewor
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBj
bGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sRGF0YWJhc2VPYmplY3RXaXRo
UHJvcGVydHlOYW1lQ29uZmxpY3RzIGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZF07Cit9
CisKKysgKHZvaWQpX3BhcnNlRHVtbXlPYmplY3Q6KFRlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlP
YmplY3QgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAg
ICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRHVtbXlPYmplY3QgYWxsb2NdIGlu
aXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorQGltcGxlbWVudGF0aW9uIFRlc3RQ
cm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKKworKyAodm9pZClfcGFyc2VQYXJh
bWV0ZXJCdW5kbGU6KFRlc3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9U
WVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAgICAqb3V0VmFsdWUgPSBbW1Rl
c3RQcm90b2NvbFRlc3RQYXJhbWV0ZXJCdW5kbGUgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXls
b2FkXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZl
cnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JX
SVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclZhbHVlcy5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGlj
dGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOwor
ICAgIHNlbGYubWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisKKyAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOwor
ICAgIHNlbGYuY29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07CisKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltqc29uT2JqZWN0IHRvSW5zcGVjdG9yT2JqZWN0XS5n
ZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihp
bnQpY29kZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNz
YWdlLCBAIm1lc3NhZ2UiKTsKKworICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgc2Vs
Zi5jb2RlID0gY29kZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE1lc3Nh
Z2U6KE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBm
b3JLZXk6QCJtZXNzYWdlIl07Cit9CisKKy0gKE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHJl
dHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOworfQorCistICh2b2lkKXNldENv
ZGU6KGludCljb2RlCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2Rl
Il07Cit9CisKKy0gKGludCljb2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5
OkAiY29kZSJdOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xEYXRh
YmFzZU9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBh
eWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIHNlbGYuY29sdW1uTmFtZXMgPSBvYmpjQXJyYXlGcm9tUGF5bG9hZDxOU1N0cmluZz4ocGF5
bG9hZFtAImNvbHVtbk5hbWVzIl0pOworCisgICAgc2VsZi5ub3RlcyA9IHBheWxvYWRbQCJub3Rl
cyJdOworCisgICAgc2VsZi50aW1lc3RhbXAgPSBbcGF5bG9hZFtAInRpbWVzdGFtcCJdIGRvdWJs
ZVZhbHVlXTsKKworICAgIHNlbGYudmFsdWVzID0gcGF5bG9hZFtAInZhbHVlcyJdOworCisgICAg
c2VsZi5wYXlsb2FkID0gcGF5bG9hZFtAInBheWxvYWQiXTsKKworICAgIHNlbGYuZXJyb3IgPSBb
W1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2Fk
W0AiZXJyb3IiXV07CisKKyAgICBzZWxmLmVycm9yTGlzdCA9IG9iamNBcnJheUZyb21QYXlsb2Fk
PFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KHBheWxvYWRbQCJlcnJvckxpc3QiXSk7CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKWpzb25PYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltqc29uT2JqZWN0IHRvSW5zcGVjdG9yT2JqZWN0
XS5nZXQoKV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpc2V0Q29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5h
bWVzCit7CisgICAgW3N1cGVyIHNldEluc3BlY3RvckFycmF5Omluc3BlY3RvclN0cmluZ0FycmF5
KGNvbHVtbk5hbWVzKSBmb3JLZXk6QCJjb2x1bW5OYW1lcyJdOworfQorCistIChOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcworeworICAgIHJldHVybiBvYmpjU3RyaW5nQXJyYXko
W3N1cGVyIGluc3BlY3RvckFycmF5Rm9yS2V5OkAiY29sdW1uTmFtZXMiXSk7Cit9CisKKy0gKHZv
aWQpc2V0Tm90ZXM6KE5TU3RyaW5nICopbm90ZXMKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm5v
dGVzIGZvcktleTpAIm5vdGVzIl07Cit9CisKKy0gKE5TU3RyaW5nICopbm90ZXMKK3sKKyAgICBy
ZXR1cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAIm5vdGVzIl07Cit9CisKKy0gKHZvaWQpc2V0VGlt
ZXN0YW1wOihkb3VibGUpdGltZXN0YW1wCit7CisgICAgW3N1cGVyIHNldERvdWJsZTp0aW1lc3Rh
bXAgZm9yS2V5OkAidGltZXN0YW1wIl07Cit9CisKKy0gKGRvdWJsZSl0aW1lc3RhbXAKK3sKKyAg
ICByZXR1cm4gW3N1cGVyIGRvdWJsZUZvcktleTpAInRpbWVzdGFtcCJdOworfQorCistICh2b2lk
KXNldFZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzCit7CisgICAgW3N1cGVy
IHNldE9iamVjdDp2YWx1ZXMgZm9yS2V5OkAidmFsdWVzIl07Cit9CisKKy0gKFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKXZhbHVlcworeworICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVj
dCBhbGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJ2
YWx1ZXMiXSB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldOworfQorCistICh2b2lkKXNldFBheWxv
YWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQKK3sKKyAgICBbc3VwZXIgc2V0T2Jq
ZWN0OnBheWxvYWQgZm9yS2V5OkAicGF5bG9hZCJdOworfQorCistIChSV0lQcm90b2NvbEpTT05P
YmplY3QgKilwYXlsb2FkCit7CisgICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFs
bG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInBheWxv
YWQiXSB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldOworfQorCistICh2b2lkKXNldEVycm9yOihU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopZXJyb3IKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0
OmVycm9yIGZvcktleTpAImVycm9yIl07Cit9CisKKy0gKFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgKillcnJvcgoreworICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxs
b2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3Ii
XSB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldOworfQorCistICh2b2lkKXNldEVycm9yTGlzdDoo
TlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxpc3QKK3sKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFX0lOX0FSUkFZKGVycm9yTGlzdCwgW1Rlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgY2xhc3NdKTsKKyAgICBbc3VwZXIgc2V0SW5zcGVjdG9yQXJy
YXk6aW5zcGVjdG9yT2JqZWN0QXJyYXkoZXJyb3JMaXN0KSBmb3JLZXk6QCJlcnJvckxpc3QiXTsK
K30KKworLSAoTlNBcnJheS8qPFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+Ki8gKillcnJvckxp
c3QKK3sKKyAgICByZXR1cm4gb2JqY0FycmF5PFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3I+KFtz
dXBlciBpbnNwZWN0b3JBcnJheUZvcktleTpAImVycm9yTGlzdCJdKTsKK30KKworQGVuZAorCitA
aW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sRGF0YWJhc2VQYXJhbWV0ZXJCdW5kbGUKKworLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDoobm9ubnVsbCBOU0RpY3Rpb25hcnk8TlNTdHJp
bmcgKiwgaWQ+ICopcGF5bG9hZAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AiY29sdW1uTmFtZXMiXSwgQCJjb2x1bW5OYW1lcyIpOworICAgIHNl
bGYuY29sdW1uTmFtZXMgPSBvYmpjQXJyYXlGcm9tUGF5bG9hZDxOU1N0cmluZz4ocGF5bG9hZFtA
ImNvbHVtbk5hbWVzIl0pOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9Q
RVJUWShwYXlsb2FkW0Aibm90ZXMiXSwgQCJub3RlcyIpOworICAgIHNlbGYubm90ZXMgPSBwYXls
b2FkW0Aibm90ZXMiXTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVS
VFkocGF5bG9hZFtAInRpbWVzdGFtcCJdLCBAInRpbWVzdGFtcCIpOworICAgIHNlbGYudGltZXN0
YW1wID0gW3BheWxvYWRbQCJ0aW1lc3RhbXAiXSBkb3VibGVWYWx1ZV07CisKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ2YWx1ZXMiXSwgQCJ2YWx1
ZXMiKTsKKyAgICBzZWxmLnZhbHVlcyA9IHBheWxvYWRbQCJ2YWx1ZXMiXTsKKworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInBheWxvYWQiXSwgQCJw
YXlsb2FkIik7CisgICAgc2VsZi5wYXlsb2FkID0gcGF5bG9hZFtAInBheWxvYWQiXTsKKworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImVycm9yIl0s
IEAiZXJyb3IiKTsKKyAgICBzZWxmLmVycm9yID0gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
IGFsbG9jXSBpbml0V2l0aFBheWxvYWQ6cGF5bG9hZFtAImVycm9yIl1dOworCisgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AiZXJyb3JMaXN0Il0sIEAi
ZXJyb3JMaXN0Iik7CisgICAgc2VsZi5lcnJvckxpc3QgPSBvYmpjQXJyYXlGcm9tUGF5bG9hZDxU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPihwYXlsb2FkW0AiZXJyb3JMaXN0Il0pOworCisgICAg
cmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBl
ciBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0u
Z2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiov
ICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUp
dGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZXJyb3I6KFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgKillcnJvciBlcnJvckxpc3Q6KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yPiovICopZXJyb3JMaXN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BST1BFUlRZKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShub3RlcywgQCJub3RlcyIpOworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkodmFsdWVzLCBAInZhbHVlcyIpOworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZCwgQCJwYXlsb2FkIik7
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShlcnJvciwgQCJlcnJv
ciIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoZXJyb3JMaXN0
LCBAImVycm9yTGlzdCIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVfSU5fQVJS
QVkoZXJyb3JMaXN0LCBbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBjbGFzc10pOworCisgICAg
c2VsZi5jb2x1bW5OYW1lcyA9IGNvbHVtbk5hbWVzOworICAgIHNlbGYubm90ZXMgPSBub3RlczsK
KyAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKyAgICBzZWxmLnZhbHVlcyA9IHZhbHVl
czsKKyAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkOworICAgIHNlbGYuZXJyb3IgPSBlcnJvcjsK
KyAgICBzZWxmLmVycm9yTGlzdCA9IGVycm9yTGlzdDsKKworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKXNldENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5O
YW1lcworeworICAgIFtzdXBlciBzZXRJbnNwZWN0b3JBcnJheTppbnNwZWN0b3JTdHJpbmdBcnJh
eShjb2x1bW5OYW1lcykgZm9yS2V5OkAiY29sdW1uTmFtZXMiXTsKK30KKworLSAoTlNBcnJheS8q
PE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMKK3sKKyAgICByZXR1cm4gb2JqY1N0cmluZ0FycmF5
KFtzdXBlciBpbnNwZWN0b3JBcnJheUZvcktleTpAImNvbHVtbk5hbWVzIl0pOworfQorCistICh2
b2lkKXNldE5vdGVzOihOU1N0cmluZyAqKW5vdGVzCit7CisgICAgW3N1cGVyIHNldFN0cmluZzpu
b3RlcyBmb3JLZXk6QCJub3RlcyJdOworfQorCistIChOU1N0cmluZyAqKW5vdGVzCit7CisgICAg
cmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJub3RlcyJdOworfQorCistICh2b2lkKXNldFRp
bWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcAoreworICAgIFtzdXBlciBzZXREb3VibGU6dGltZXN0
YW1wIGZvcktleTpAInRpbWVzdGFtcCJdOworfQorCistIChkb3VibGUpdGltZXN0YW1wCit7Cisg
ICAgcmV0dXJuIFtzdXBlciBkb3VibGVGb3JLZXk6QCJ0aW1lc3RhbXAiXTsKK30KKworLSAodm9p
ZClzZXRWYWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcworeworICAgIFtzdXBl
ciBzZXRPYmplY3Q6dmFsdWVzIGZvcktleTpAInZhbHVlcyJdOworfQorCistIChSV0lQcm90b2Nv
bEpTT05PYmplY3QgKil2YWx1ZXMKK3sKKyAgICByZXR1cm4gW1tSV0lQcm90b2NvbEpTT05PYmpl
Y3QgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9yT2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAi
dmFsdWVzIl0gdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXTsKK30KKworLSAodm9pZClzZXRQYXls
b2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCit7CisgICAgW3N1cGVyIHNldE9i
amVjdDpwYXlsb2FkIGZvcktleTpAInBheWxvYWQiXTsKK30KKworLSAoUldJUHJvdG9jb2xKU09O
T2JqZWN0ICopcGF5bG9hZAoreworICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBh
bGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJwYXls
b2FkIl0gdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXTsKK30KKworLSAodm9pZClzZXRFcnJvcjoo
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKWVycm9yCit7CisgICAgW3N1cGVyIHNldE9iamVj
dDplcnJvciBmb3JLZXk6QCJlcnJvciJdOworfQorCistIChUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICopZXJyb3IKK3sKKyAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFs
bG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAImVycm9y
Il0gdG9JbnNwZWN0b3JPYmplY3RdLmdldCgpXTsKK30KKworLSAodm9pZClzZXRFcnJvckxpc3Q6
KE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JMaXN0Cit7Cisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9BUlJBWShlcnJvckxpc3QsIFtUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yIGNsYXNzXSk7CisgICAgW3N1cGVyIHNldEluc3BlY3RvckFy
cmF5Omluc3BlY3Rvck9iamVjdEFycmF5KGVycm9yTGlzdCkgZm9yS2V5OkAiZXJyb3JMaXN0Il07
Cit9CisKKy0gKE5TQXJyYXkvKjxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPiovICopZXJyb3JM
aXN0Cit7CisgICAgcmV0dXJuIG9iamNBcnJheTxUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yPihb
c3VwZXIgaW5zcGVjdG9yQXJyYXlGb3JLZXk6QCJlcnJvckxpc3QiXSk7Cit9CisKK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbERhdGFiYXNlT2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5T
RGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJpbnRlZ2VyIl0sIEAiaW50ZWdlciIp
OworICAgIHNlbGYuaW50ZWdlciA9IHBheWxvYWRbQCJpbnRlZ2VyIl07CisKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJhcnJheSJdLCBAImFycmF5
Iik7CisgICAgc2VsZi5hcnJheSA9IHBheWxvYWRbQCJhcnJheSJdOworCisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Aic3RyaW5nIl0sIEAic3RyaW5n
Iik7CisgICAgc2VsZi5zdHJpbmcgPSBwYXlsb2FkW0Aic3RyaW5nIl07CisKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJ2YWx1ZSJdLCBAInZhbHVl
Iik7CisgICAgc2VsZi52YWx1ZSA9IHBheWxvYWRbQCJ2YWx1ZSJdOworCisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0Aib2JqZWN0Il0sIEAib2JqZWN0
Iik7CisgICAgc2VsZi5vYmplY3QgPSBwYXlsb2FkW0Aib2JqZWN0Il07CisKKyAgICByZXR1cm4g
c2VsZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKWpzb25PYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRX
aXRoSW5zcGVjdG9yT2JqZWN0Oltqc29uT2JqZWN0IHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV0p
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aEludGVnZXI6KE5TU3RyaW5nICopaW50ZWdlciBhcnJheTooTlNTdHJp
bmcgKilhcnJheSBzdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHZhbHVlOihOU1N0cmluZyAqKXZh
bHVlIG9iamVjdDooTlNTdHJpbmcgKilvYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkoaW50ZWdlciwgQCJpbnRlZ2VyIik7CisgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShhcnJheSwgQCJhcnJheSIpOworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkoc3RyaW5nLCBAInN0cmluZyIpOworICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkodmFsdWUsIEAidmFsdWUiKTsKKyAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG9iamVjdCwgQCJvYmplY3Qi
KTsKKworICAgIHNlbGYuaW50ZWdlciA9IGludGVnZXI7CisgICAgc2VsZi5hcnJheSA9IGFycmF5
OworICAgIHNlbGYuc3RyaW5nID0gc3RyaW5nOworICAgIHNlbGYudmFsdWUgPSB2YWx1ZTsKKyAg
ICBzZWxmLm9iamVjdCA9IG9iamVjdDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KXNldEludGVnZXI6KE5TU3RyaW5nICopaW50ZWdlcgoreworICAgIFtzdXBlciBzZXRTdHJpbmc6
aW50ZWdlciBmb3JLZXk6QCJpbnRlZ2VyIl07Cit9CisKKy0gKE5TU3RyaW5nICopaW50ZWdlcgor
eworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAiaW50ZWdlciJdOworfQorCistICh2
b2lkKXNldEFycmF5OihOU1N0cmluZyAqKWFycmF5Cit7CisgICAgW3N1cGVyIHNldFN0cmluZzph
cnJheSBmb3JLZXk6QCJhcnJheSJdOworfQorCistIChOU1N0cmluZyAqKWFycmF5Cit7CisgICAg
cmV0dXJuIFtzdXBlciBzdHJpbmdGb3JLZXk6QCJhcnJheSJdOworfQorCistICh2b2lkKXNldFN0
cmluZzooTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOnN0cmluZyBm
b3JLZXk6QCJzdHJpbmciXTsKK30KKworLSAoTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICByZXR1
cm4gW3N1cGVyIHN0cmluZ0ZvcktleTpAInN0cmluZyJdOworfQorCistICh2b2lkKXNldFZhbHVl
OihOU1N0cmluZyAqKXZhbHVlCit7CisgICAgW3N1cGVyIHNldFN0cmluZzp2YWx1ZSBmb3JLZXk6
QCJ2YWx1ZSJdOworfQorCistIChOU1N0cmluZyAqKXZhbHVlCit7CisgICAgcmV0dXJuIFtzdXBl
ciBzdHJpbmdGb3JLZXk6QCJ2YWx1ZSJdOworfQorCistICh2b2lkKXNldE9iamVjdDooTlNTdHJp
bmcgKilvYmplY3QKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm9iamVjdCBmb3JLZXk6QCJvYmpl
Y3QiXTsKK30KKworLSAoTlNTdHJpbmcgKilvYmplY3QKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0
cmluZ0ZvcktleTpAIm9iamVjdCJdOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0
UHJvdG9jb2xEYXRhYmFzZUR1bW15T2JqZWN0CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBh
eWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W2pzb25PYmplY3QgdG9JbnNwZWN0b3JPYmpl
Y3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30K
KworQGVuZAorCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0UGFyYW1ldGVyQnVu
ZGxlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KG5vbm51bGwgTlNEaWN0aW9u
YXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAImNvbHVtbk5hbWVzIl0sIEAiY29sdW1uTmFtZXMi
KTsKKyAgICBzZWxmLmNvbHVtbk5hbWVzID0gb2JqY0FycmF5RnJvbVBheWxvYWQ8TlNTdHJpbmc+
KHBheWxvYWRbQCJjb2x1bW5OYW1lcyJdKTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUFJPUEVSVFkocGF5bG9hZFtAIm5vdGVzIl0sIEAibm90ZXMiKTsKKyAgICBzZWxmLm5v
dGVzID0gcGF5bG9hZFtAIm5vdGVzIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJ0aW1lc3RhbXAiXSwgQCJ0aW1lc3RhbXAiKTsKKyAgICBz
ZWxmLnRpbWVzdGFtcCA9IFtwYXlsb2FkW0AidGltZXN0YW1wIl0gZG91YmxlVmFsdWVdOworCisg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkW0AidmFsdWVz
Il0sIEAidmFsdWVzIik7CisgICAgc2VsZi52YWx1ZXMgPSBwYXlsb2FkW0AidmFsdWVzIl07CisK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJwYXls
b2FkIl0sIEAicGF5bG9hZCIpOworICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWRbQCJwYXlsb2Fk
Il07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRb
QCJlcnJvciJdLCBAImVycm9yIik7CisgICAgc2VsZi5lcnJvciA9IFtbVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJlcnJvciJdXTsKKwor
ICAgIHJldHVybiBzZWxmOworfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDoo
UldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdAoreworICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W2pzb25PYmplY3QgdG9JbnNwZWN0b3JPYmpl
Y3RdLmdldCgpXSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91
YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXls
b2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIGVycm9yOihUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yICopZXJyb3IKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UFJPUEVSVFkoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKG5vdGVzLCBAIm5vdGVzIik7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWSh2YWx1ZXMsIEAidmFsdWVzIik7CisgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShwYXlsb2FkLCBAInBheWxvYWQiKTsK
KyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKGVycm9yLCBAImVycm9y
Iik7CisKKyAgICBzZWxmLmNvbHVtbk5hbWVzID0gY29sdW1uTmFtZXM7CisgICAgc2VsZi5ub3Rl
cyA9IG5vdGVzOworICAgIHNlbGYudGltZXN0YW1wID0gdGltZXN0YW1wOworICAgIHNlbGYudmFs
dWVzID0gdmFsdWVzOworICAgIHNlbGYucGF5bG9hZCA9IHBheWxvYWQ7CisgICAgc2VsZi5lcnJv
ciA9IGVycm9yOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0Q29sdW1uTmFt
ZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzCit7CisgICAgW3N1cGVyIHNl
dEluc3BlY3RvckFycmF5Omluc3BlY3RvclN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSBmb3JLZXk6
QCJjb2x1bW5OYW1lcyJdOworfQorCistIChOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5O
YW1lcworeworICAgIHJldHVybiBvYmpjU3RyaW5nQXJyYXkoW3N1cGVyIGluc3BlY3RvckFycmF5
Rm9yS2V5OkAiY29sdW1uTmFtZXMiXSk7Cit9CisKKy0gKHZvaWQpc2V0Tm90ZXM6KE5TU3RyaW5n
ICopbm90ZXMKK3sKKyAgICBbc3VwZXIgc2V0U3RyaW5nOm5vdGVzIGZvcktleTpAIm5vdGVzIl07
Cit9CisKKy0gKE5TU3RyaW5nICopbm90ZXMKK3sKKyAgICByZXR1cm4gW3N1cGVyIHN0cmluZ0Zv
cktleTpAIm5vdGVzIl07Cit9CisKKy0gKHZvaWQpc2V0VGltZXN0YW1wOihkb3VibGUpdGltZXN0
YW1wCit7CisgICAgW3N1cGVyIHNldERvdWJsZTp0aW1lc3RhbXAgZm9yS2V5OkAidGltZXN0YW1w
Il07Cit9CisKKy0gKGRvdWJsZSl0aW1lc3RhbXAKK3sKKyAgICByZXR1cm4gW3N1cGVyIGRvdWJs
ZUZvcktleTpAInRpbWVzdGFtcCJdOworfQorCistICh2b2lkKXNldFZhbHVlczooUldJUHJvdG9j
b2xKU09OT2JqZWN0ICopdmFsdWVzCit7CisgICAgW3N1cGVyIHNldE9iamVjdDp2YWx1ZXMgZm9y
S2V5OkAidmFsdWVzIl07Cit9CisKKy0gKFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcwor
eworICAgIHJldHVybiBbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhJbnNw
ZWN0b3JPYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJ2YWx1ZXMiXSB0b0luc3BlY3Rvck9i
amVjdF0uZ2V0KCldOworfQorCistICh2b2lkKXNldFBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKXBheWxvYWQKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OnBheWxvYWQgZm9yS2V5OkAi
cGF5bG9hZCJdOworfQorCistIChSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkCit7Cisg
ICAgcmV0dXJuIFtbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEluc3BlY3Rv
ck9iamVjdDpbW3N1cGVyIG9iamVjdEZvcktleTpAInBheWxvYWQiXSB0b0luc3BlY3Rvck9iamVj
dF0uZ2V0KCldOworfQorCistICh2b2lkKXNldEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICopZXJyb3IKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0OmVycm9yIGZvcktleTpAImVycm9y
Il07Cit9CisKKy0gKFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKillcnJvcgoreworICAgIHJl
dHVybiBbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSW5zcGVjdG9y
T2JqZWN0Oltbc3VwZXIgb2JqZWN0Rm9yS2V5OkAiZXJyb3IiXSB0b0luc3BlY3Rvck9iamVjdF0u
Z2V0KCldOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5t
bQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzAzNjhmZGRhNWEzYWVmMjAxYzU3Njc1YTk1ZWYyNjNiOGMwNmMxNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1
bHQKQEAgLTAsMCArMSwxNTgyIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJp
bmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKy8vIFRlc3QuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiVGVzdC5V
bmNhc3RlZEFuaW1hbHMiLCB7UGlnczogIlBpZ3MiLCBDb3dzOiAiQ293cyIsIENhdHM6ICJDYXRz
IiwgSGVuczogIkhlbnMifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiVGVzdC5D
YXN0ZWRBbmltYWxzIiwge0R1Y2tzOiAiRHVja3MiLCBIZW5zOiAiSGVucyIsIENyb3dzOiAiQ3Jv
d3MiLCBGbGFtaW5nb3M6ICJGbGFtaW5nb3MifSk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJh
Y2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1
aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCitjbGFzcyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6Cisg
ICAgdm9pZCBzZXRCYWNrZW5kRGlzcGF0Y2hlcihSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+JiYg
ZGlzcGF0Y2hlcikgeyBtX2JhY2tlbmREaXNwYXRjaGVyID0gV1RGTW92ZShkaXNwYXRjaGVyKTsg
fQorICAgIEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEJh
Y2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCisKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKKyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3Rz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBF
cnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxl
OiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1y
ZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisjaW5jbHVkZSAi
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xh
c3MgRnJvbnRlbmRSb3V0ZXI7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBG
aWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVu
dGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29s
VHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKy8vIEZvcndhcmQgZGVjbGFyYXRp
b25zLgorbmFtZXNwYWNlIFRlc3QgeworY2xhc3MgVHlwZU5lZWRpbmdDYXN0OworY2xhc3MgUmVj
dXJzaXZlT2JqZWN0MTsKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDI7CitlbnVtIGNsYXNzIFVuY2Fz
dGVkQW5pbWFsczsKK2VudW0gY2xhc3MgQ2FzdGVkQW5pbWFsczsKK30gLy8gVGVzdAorLy8gRW5k
IG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIFRl
c3QgewordHlwZWRlZiBpbnQgQ2FzdGVkT2JqZWN0SWQ7Cit0eXBlZGVmIGludCBVbmNhc3RlZE9i
amVjdElkOworfSAvLyBUZXN0CisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK25hbWVzcGFjZSBUZXN0
SGVscGVycyB7CisKK1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1
ZSkKK3sKKyAgICByZXR1cm4gZ2V0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50Pihl
bnVtVmFsdWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworbmFtZXNwYWNl
IFRlc3QgeworLyogQSBkdW1teSB0eXBlIHRoYXQgcmVxdWlyZXMgcnVudGltZSBjYXN0cywgYW5k
IGZvcmNlcyBub24tcHJpbWl0aXZlIHJlZmVyZW5jZWQgdHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRp
bWUgY2FzdCBoZWxwZXJzLiAqLworY2xhc3MgVHlwZU5lZWRpbmdDYXN0IDogcHVibGljIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgU3RyaW5nU2V0ID0gMSA8PCAwLAorICAgICAgICBO
dW1iZXJTZXQgPSAxIDw8IDEsCisgICAgICAgIEFuaW1hbHNTZXQgPSAxIDw8IDIsCisgICAgICAg
IElkU2V0ID0gMSA8PCAzLAorICAgICAgICBUcmVlU2V0ID0gMSA8PCA0LAorICAgICAgICBBbGxG
aWVsZHNTZXQgPSAoU3RyaW5nU2V0IHwgTnVtYmVyU2V0IHwgQW5pbWFsc1NldCB8IElkU2V0IHwg
VHJlZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1
aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1f
cmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXIoUmVmPC8qVHlwZU5lZWRpbmdDYXN0Ki9JbnNwZWN0b3JPYmplY3Q+JiYgb2Jq
ZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBj
bGFzcyBUeXBlTmVlZGluZ0Nhc3Q7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0cmluZ1NldCksIHByb3Bl
cnR5X3N0cmluZ19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgic3RyaW5nIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8U3RyaW5nU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE51bWJlclNldD4mIHNldE51bWJlcihpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOdW1iZXJTZXQpLCBwcm9wZXJ0eV9udW1iZXJfYWxy
ZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoQVNDSUlMaXRlcmFs
KCJudW1iZXIiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOdW1iZXJT
ZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQW5pbWFsc1NldD4m
IHNldEFuaW1hbHMoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscyB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFuaW1h
bHNTZXQpLCBwcm9wZXJ0eV9hbmltYWxzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJhbmltYWxzIiksIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOworICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxBbmltYWxzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IElkU2V0PiYgc2V0SWQoaW50IHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSWRTZXQpLCBwcm9wZXJ0eV9pZF9hbHJl
YWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwo
ImlkIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SWRTZXQ+KCk7Cisg
ICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHJlZVNldD4mIHNldFRyZWUoUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHJlZVNldCks
IHByb3BlcnR5X3RyZWVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9i
amVjdChBU0NJSUxpdGVyYWwoInRyZWUiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxUcmVlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPFR5cGVOZWVkaW5n
Q2FzdD4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoVHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2YoSW5zcGVjdG9y
T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgcmV0dXJu
IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFR5cGVOZWVkaW5nQ2FzdD4qPigmcmVzdWx0
KSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6CisgICAgICogUmVmPFR5cGVOZWVkaW5nQ2FzdD4gcmVzdWx0ID0gVHlwZU5lZWRpbmdD
YXN0OjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0U3RyaW5nKC4uLikKKyAgICAgKiAgICAgLnNl
dE51bWJlciguLi4pCisgICAgICogICAgIC5zZXRBbmltYWxzKC4uLikKKyAgICAgKiAgICAgLnNl
dElkKC4uLikKKyAgICAgKiAgICAgLnNldFRyZWUoLi4uKQorICAgICAqICAgICAucmVsZWFzZSgp
OworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCkpOworICAgIH0KK307CisKKy8qICAqLworZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1h
bHMgeworICAgIFBpZ3MgPSA0LAorICAgIENvd3MgPSA1LAorICAgIENhdHMgPSA2LAorICAgIEhl
bnMgPSAxLAorfTsgLy8gZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHMKKy8qICAqLworZW51bSBj
bGFzcyBDYXN0ZWRBbmltYWxzIHsKKyAgICBEdWNrcyA9IDAsCisgICAgSGVucyA9IDEsCisgICAg
Q3Jvd3MgPSAyLAorICAgIEZsYW1pbmdvcyA9IDMsCit9OyAvLyBlbnVtIGNsYXNzIENhc3RlZEFu
aW1hbHMKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDEgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCisgICAgfTsKKworICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKlJlY3Vyc2l2ZU9iamVjdDEq
L0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1v
dmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIFJlY3Vyc2l2ZU9iamVjdDE7CisgICAgcHVibGlj
OgorCisgICAgICAgIFJlZjxSZWN1cnNpdmVPYmplY3QxPiByZWxlYXNlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWN1cnNp
dmVPYmplY3QxKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisg
ICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNl
Tm9uTnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmPFJlY3Vyc2l2ZU9iamVjdDE+Kj4oJnJlc3VsdCkpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxSZWN1cnNp
dmVPYmplY3QxPiByZXN1bHQgPSBSZWN1cnNpdmVPYmplY3QxOjpjcmVhdGUoKQorICAgICAqICAg
ICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKworICAgIHZvaWQgc2V0T2JqKFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdChBU0NJSUxpdGVyYWwoIm9i
aiIpLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgfQorfTsKKworY2xhc3MgUmVjdXJzaXZlT2JqZWN0
MiA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVibGljOgorICAg
IGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIEFsbEZpZWxkc1NldCA9
IDAKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIg
eworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0
OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1
aWxkZXIoUmVmPC8qUmVjdXJzaXZlT2JqZWN0MiovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkK
KyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3Mg
UmVjdXJzaXZlT2JqZWN0MjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgUmVmPFJlY3Vyc2l2ZU9i
amVjdDI+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDIpID09IHNpemVvZihJbnNwZWN0
b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICByZXR1
cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UmVjdXJzaXZlT2JqZWN0Mj4qPigmcmVz
dWx0KSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29u
c3RydWN0b3I6CisgICAgICogUmVmPFJlY3Vyc2l2ZU9iamVjdDI+IHJlc3VsdCA9IFJlY3Vyc2l2
ZU9iamVjdDI6OmNyZWF0ZSgpCisgICAgICogICAgIC5yZWxlYXNlKCk7CisgICAgICovCisgICAg
c3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1
cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAg
fQorCisgICAgdm9pZCBzZXRPYmooUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJl
Y3Vyc2l2ZU9iamVjdDE+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFz
ZTo6c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgib2JqIiksIFdURk1vdmUodmFsdWUpKTsKKyAgICB9
Cit9OworCit9IC8vIFRlc3QKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7CisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZSopOworI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKK307Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVO
ZWVkaW5nQ2FzdD4geworc3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpU
eXBlTmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlPiYmIHZhbHVlKTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECitzdGF0aWMgdm9pZCBhc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKik7CisjZW5kaWYg
Ly8gIUFTU0VSVF9ESVNBQkxFRAorfTsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4geworI2lmICFBU1NF
UlRfRElTQUJMRUQKK3N0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsKKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECit9Owor
dGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpSZWN1cnNpdmVPYmplY3QyPiB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorc3RhdGljIHZvaWQg
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOwor
I2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKK307CisKK25hbWVzcGFjZSBUZXN0SGVscGVycyB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFByb3RvY29sRW51bVR5cGU+CitzdGQ6Om9wdGlvbmFsPFBy
b3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsK
KworLy8gRW51bXMgaW4gdGhlICdUZXN0JyBEb21haW4KK3RlbXBsYXRlPD4KK3N0ZDo6b3B0aW9u
YWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxz
Pihjb25zdCBTdHJpbmcmKTsKK3RlbXBsYXRlPD4KK3N0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwor
Cit9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2Jq
ZWN0cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFByb3RvY29sIHsKKworbmFtZXNwYWNlIFRl
c3RIZWxwZXJzIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFs
dWVzW10gPSB7CisgICAgIkR1Y2tzIiwKKyAgICAiSGVucyIsCisgICAgIkNyb3dzIiwKKyAgICAi
RmxhbWluZ29zIiwKKyAgICAiUGlncyIsCisgICAgIkNvd3MiLAorICAgICJDYXRzIiwKK307CisK
K1N0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVt
X2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworLy8gRW51bXMgaW4gdGhlICdUZXN0JyBEb21h
aW4KK3RlbXBsYXRlPD4KK3N0ZDo6b3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5n
KQoreworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKKyAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OlBp
Z3MsCisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRB
bmltYWxzOjpDb3dzLAorICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6
OlVuY2FzdGVkQW5pbWFsczo6Q2F0cywKKyAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OkhlbnMsCisgICAgfTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1f
Y29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAo
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzKWNvbnN0YW50VmFsdWVz
W2ldOworCisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKwordGVtcGxhdGU8Pgorc3RkOjpv
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFs
cz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK3sKKyAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7CisgICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6RHVja3MsCisgICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6SGVucywKKyAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpDcm93cywKKyAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpGbGFt
aW5nb3MsCisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAg
ICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFs
dWVzW2ldXSkKKyAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
Q2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKKworICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKKworCisKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5z
cGVjdG9yVmFsdWUqIHZhbHVlKQoreworICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKKyAg
ICBTdHJpbmcgcmVzdWx0OworICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc1N0cmlu
ZyhyZXN1bHQpOworICAgIEFTU0VSVChjYXN0U3VjY2VlZGVkKTsKKyAgICBBU1NFUlQocmVzdWx0
ID09ICJEdWNrcyIgfHwgcmVzdWx0ID09ICJIZW5zIiB8fCByZXN1bHQgPT0gIkNyb3dzIiB8fCBy
ZXN1bHQgPT0gIkZsYW1pbmdvcyIpOworfQorI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKKwor
I2lmICFBU1NFUlRfRElTQUJMRUQKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJ
bnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSkKK3sKKyAgICBBU1NFUlRfQVJHKHZhbHVl
LCB2YWx1ZSk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OworICAgIGJvb2wg
Y2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOworICAgIEFTU0VSVF9VTlVT
RUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CisgICAgeworICAgICAgICBJbnNwZWN0
b3JPYmplY3Q6Oml0ZXJhdG9yIHN0cmluZ1BvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwo
InN0cmluZyIpKTsKKyAgICAgICAgQVNTRVJUKHN0cmluZ1BvcyAhPSBvYmplY3QtPmVuZCgpKTsK
KyAgICAgICAgQmluZGluZ1RyYWl0czxTdHJpbmc+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShzdHJpbmdQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBJbnNwZWN0
b3JPYmplY3Q6Oml0ZXJhdG9yIG51bWJlclBvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwo
Im51bWJlciIpKTsKKyAgICAgICAgQVNTRVJUKG51bWJlclBvcyAhPSBvYmplY3QtPmVuZCgpKTsK
KyAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShu
dW1iZXJQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBJbnNwZWN0b3JP
YmplY3Q6Oml0ZXJhdG9yIGFuaW1hbHNQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJh
bmltYWxzIikpOworICAgICAgICBBU1NFUlQoYW5pbWFsc1BvcyAhPSBvYmplY3QtPmVuZCgpKTsK
KyAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoYW5pbWFsc1Bvcy0+dmFsdWUuZ2V0
KCkpOworICAgIH0KKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgaWRQ
b3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJpZCIpKTsKKyAgICAgICAgQVNTRVJUKGlk
UG9zICE9IG9iamVjdC0+ZW5kKCkpOworICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2Vy
dFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGlkUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgfQorICAgIHsK
KyAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciB0cmVlUG9zID0gb2JqZWN0LT5maW5k
KEFTQ0lJTGl0ZXJhbCgidHJlZSIpKTsKKyAgICAgICAgQVNTRVJUKHRyZWVQb3MgIT0gb2JqZWN0
LT5lbmQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHRyZWVQb3Mt
PnZhbHVlLmdldCgpKTsKKyAgICB9CisKKyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSA1
OworICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKKyAgICAg
ICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3Qt
PnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKK30KKyNlbmRpZiAvLyAhQVNTRVJUX0RJ
U0FCTEVECisKK1JlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nh
c3Q+IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdD
YXN0Pjo6cnVudGltZUNhc3QoUmVmUHRyPEluc3BlY3RvclZhbHVlPiYmIHZhbHVlKQoreworICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdDsKKyAgICBib29sIGNhc3RTdWNjZWVkZWQg
PSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVk
ZWQsIGNhc3RTdWNjZWVkZWQpOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBCaW5kaW5nVHJh
aXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZh
bHVlSGFzRXhwZWN0ZWRUeXBlKHJlc3VsdC5nZXQoKSk7CisjZW5kaWYgIC8vICFBU1NFUlRfRElT
QUJMRUQKKyAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6VHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0QmFzZSksIHR5cGVf
Y2FzdF9wcm9ibGVtKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Kj4oc3RhdGljX2Nhc3Q8SW5zcGVjdG9yT2JqZWN0QmFz
ZSo+KHJlc3VsdC5nZXQoKSkpOworfQorCisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECit2b2lkIEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46
OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZh
bHVlKQoreworICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBvYmplY3Q7CisgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2Jq
ZWN0KG9iamVjdCk7CisgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2Vl
ZGVkKTsKKworICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7CisgICAgeworICAgICAg
ICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIG9ialBvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxp
dGVyYWwoIm9iaiIpKTsKKyAgICAgICAgaWYgKG9ialBvcyAhPSBvYmplY3QtPmVuZCgpKSB7Cisg
ICAgICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLmdl
dCgpKTsKKyAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7CisgICAgICAgIH0KKyAg
ICB9CisgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKQorICAg
ICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVj
dC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworfQorI2VuZGlmIC8vICFBU1NFUlRf
RElTQUJMRUQKKworI2lmICFBU1NFUlRfRElTQUJMRUQKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCit7CisgICAgQVNT
RVJUX0FSRyh2YWx1ZSwgdmFsdWUpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVj
dDsKKyAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKKyAg
ICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworCisgICAgaW50
IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVj
dDo6aXRlcmF0b3Igb2JqUG9zID0gb2JqZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgib2JqIikpOwor
ICAgICAgICBpZiAob2JqUG9zICE9IG9iamVjdC0+ZW5kKCkpIHsKKyAgICAgICAgICAgIEJpbmRp
bmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAgICAg
ICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZm91
bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkpCisgICAgICAgIEZBVEFMKCJVbmV4
cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmco
KS5hc2NpaSgpLmRhdGEoKSk7Cit9CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorCit9IC8v
IG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVu
ZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFBy
b3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KKworCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNh
c3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yVmFsdWVzLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
bW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0
IDxXZWJJbnNwZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxp
dHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDog
TlNPYmplY3QKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRp
b24uaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaCIKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJh
Y2tlbmREaXNwYXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlz
cGF0Y2hhYmxlQWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
KworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24KK3sKKyAgICBBdWdt
ZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIq
KWNvbnRyb2xsZXIKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBBU1NFUlQoY29udHJvbGxlcik7CisgICAgX2NvbnRy
b2xsZXIgPSBjb250cm9sbGVyOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxs
b2MKK3sKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6
IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90
b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lv
bnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sRXZl
bnREaXNwYXRjaGVycy5tbQorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3Rz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQ
cm90b2NvbEpTT05PYmplY3QuaD4KKworCitAY2xhc3MgVGVzdFByb3RvY29sVGVzdFR5cGVOZWVk
aW5nQ2FzdDsKK0BjbGFzcyBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MTsKK0BjbGFz
cyBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MjsKKworCit0eXBlZGVmIE5TX0VOVU0o
TlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzKSB7CisgICAgVGVzdFBy
b3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc1BpZ3MsCisgICAgVGVzdFByb3RvY29sVGVzdFVuY2Fz
dGVkQW5pbWFsc0Nvd3MsCisgICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHMs
CisgICAgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0hlbnMsCit9OworCit0eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscykgeworICAg
IFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3MsCisgICAgVGVzdFByb3RvY29sVGVz
dENhc3RlZEFuaW1hbHNIZW5zLAorICAgIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzQ3Jv
d3MsCisgICAgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3MsCit9OworCisK
K19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBUZXN0
UHJvdG9jb2xUZXN0VHlwZU5lZWRpbmdDYXN0IDogUldJUHJvdG9jb2xKU09OT2JqZWN0CistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+
ICopcGF5bG9hZDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKWpzb25PYmplY3Q7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhTdHJp
bmc6KE5TU3RyaW5nICopc3RyaW5nIG51bWJlcjooaW50KW51bWJlciBhbmltYWxzOihUZXN0UHJv
dG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzIGlkZW50aWZpZXI6KGludClpZGVudGlmaWVy
IHRyZWU6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICopdHJlZTsKKy8qIHJlcXVp
cmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqc3RyaW5nOworLyog
cmVxdWlyZWQgKi8gQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbikgaW50IG51bWJlcjsKKy8q
IHJlcXVpcmVkICovIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIFRlc3RQcm90b2NvbFRl
c3RDYXN0ZWRBbmltYWxzIGFuaW1hbHM7CisvKiByZXF1aXJlZCAqLyBAcHJvcGVydHkgKG5vbmF0
b21pYywgYXNzaWduKSBpbnQgaWRlbnRpZmllcjsKKy8qIHJlcXVpcmVkICovIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICp0cmVl
OworQGVuZAorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRl
cmZhY2UgVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgOiBSV0lQcm90b2NvbEpTT05P
YmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0
cmluZyAqLCBpZD4gKilwYXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVj
dDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopanNvbk9iamVjdDsKKy8qIG9wdGlvbmFsICovIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4pIFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmpl
Y3QyICpvYmo7CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0Iikp
KQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiA6IFJXSVByb3Rv
Y29sSlNPTk9iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoUGF5bG9hZDooTlNEaWN0aW9u
YXJ5PE5TU3RyaW5nICosIGlkPiAqKXBheWxvYWQ7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhK
U09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0OworLyogb3B0aW9u
YWwgKi8gQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgVGVzdFByb3RvY29sVGVzdFJlY3Vy
c2l2ZU9iamVjdDEgKm9iajsKK0BlbmQKKworCisKKworCisKKyMjIyBFbmQgRmlsZTogVGVzdFBy
b3RvY29sLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbEludGVybmFsLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3Rz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9y
dCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0UHJpdmF0
ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworCisK
KworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIK
KyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2NvbEFycmF5Q29udmVyc2lvbnMuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIE9iakNFbnVtVHlwZT4K
K09iakNFbnVtVHlwZSBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisK
KworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFRlc3RVbmNhc3Rl
ZEFuaW1hbHMgdmFsdWUpCit7CisgICAgc3dpdGNoKHZhbHVlKSB7CisgICAgY2FzZSBUZXN0UHJv
dG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzUGlnczoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJh
bCgiUGlncyIpOworICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0Nvd3M6
CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkNvd3MiKTsKKyAgICBjYXNlIFRlc3RQcm90
b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNDYXRzOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFs
KCJDYXRzIik7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzSGVuczoK
KyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiSGVucyIpOworICAgIH0KK30KKwordGVtcGxh
dGU8PgoraW5saW5lIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHMgZnJvbVByb3RvY29s
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJQaWdzIikK
KyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNQaWdzOworICAg
IGlmICh2YWx1ZSA9PSAiQ293cyIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUZXN0VW5j
YXN0ZWRBbmltYWxzQ293czsKKyAgICBpZiAodmFsdWUgPT0gIkNhdHMiKQorICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sVGVzdFVuY2FzdGVkQW5pbWFsc0NhdHM7CisgICAgaWYgKHZhbHVlID09
ICJIZW5zIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RVbmNhc3RlZEFuaW1hbHNI
ZW5zOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBUZXN0UHJvdG9jb2xU
ZXN0VW5jYXN0ZWRBbmltYWxzUGlnczsKK30KKworaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3Ry
aW5nKFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzIHZhbHVlKQoreworICAgIHN3aXRjaCh2
YWx1ZSkgeworICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNEdWNrczoKKyAg
ICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiRHVja3MiKTsKKyAgICBjYXNlIFRlc3RQcm90b2Nv
bFRlc3RDYXN0ZWRBbmltYWxzSGVuczoKKyAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiSGVu
cyIpOworICAgIGNhc2UgVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNDcm93czoKKyAgICAg
ICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiQ3Jvd3MiKTsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFRl
c3RDYXN0ZWRBbmltYWxzRmxhbWluZ29zOgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJG
bGFtaW5nb3MiKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBUZXN0UHJvdG9jb2xU
ZXN0Q2FzdGVkQW5pbWFscyBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUgPT0gIkR1Y2tzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2Nv
bFRlc3RDYXN0ZWRBbmltYWxzRHVja3M7CisgICAgaWYgKHZhbHVlID09ICJIZW5zIikKKyAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzSGVuczsKKyAgICBpZiAodmFs
dWUgPT0gIkNyb3dzIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmlt
YWxzQ3Jvd3M7CisgICAgaWYgKHZhbHVlID09ICJGbGFtaW5nb3MiKQorICAgICAgICByZXR1cm4g
VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHNGbGFtaW5nb3M7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzRHVja3M7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90
b2NvbFR5cGVDb252ZXJzaW9ucy5oCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJl
cXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xU
eXBlQ29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJU
ZXN0UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9j
b2xKU09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitA
aW50ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKKworKyAo
dm9pZClfcGFyc2VUeXBlTmVlZGluZ0Nhc3Q6KFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nh
c3QgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUNh
c3RlZE9iamVjdElkOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9h
ZDsKKysgKHZvaWQpX3BhcnNlVW5jYXN0ZWRPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUg
ZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZVVuY2FzdGVkQW5pbWFsczoo
TlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9w
YXJzZUNhc3RlZEFuaW1hbHM6KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClw
YXlsb2FkOworKyAodm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QxOihUZXN0UHJvdG9jb2xUZXN0
UmVjdXJzaXZlT2JqZWN0MSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysg
KHZvaWQpX3BhcnNlUmVjdXJzaXZlT2JqZWN0MjooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9i
amVjdDIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQ7CisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVGVzdERvbWFpbikKKwor
KyAodm9pZClfcGFyc2VUeXBlTmVlZGluZ0Nhc3Q6KFRlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGlu
Z0Nhc3QgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU0RpY3Rpb25hcnkgY2xhc3NdKTsKKyAg
ICAqb3V0VmFsdWUgPSBbW1Rlc3RQcm90b2NvbFRlc3RUeXBlTmVlZGluZ0Nhc3QgYWxsb2NdIGlu
aXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworKyAodm9pZClfcGFyc2VDYXN0ZWRPYmplY3RJ
ZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051bWJlciBjbGFzc10pOwor
ICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Cit9CisKKysgKHZvaWQpX3BhcnNl
VW5jYXN0ZWRPYmplY3RJZDooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBh
eWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU051
bWJlciBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IChOU051bWJlciAqKXBheWxvYWQ7Cit9CisK
KysgKHZvaWQpX3BhcnNlVW5jYXN0ZWRBbmltYWxzOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUo
cGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gQChJbnNwZWN0b3I6
OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUZXN0VW5jYXN0ZWRBbmltYWxzPihwYXls
b2FkKSk7Cit9CisKKysgKHZvaWQpX3BhcnNlQ2FzdGVkQW5pbWFsczooTlNOdW1iZXIgKiopb3V0
VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKK3sKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IEAo
SW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1h
bHM+KHBheWxvYWQpKTsKK30KKworKyAodm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QxOihUZXN0
UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQp
cGF5bG9hZAoreworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05T
RGljdGlvbmFyeSBjbGFzc10pOworICAgICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFJl
Y3Vyc2l2ZU9iamVjdDEgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworKyAo
dm9pZClfcGFyc2VSZWN1cnNpdmVPYmplY3QyOihUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2Jq
ZWN0MiAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAoreworICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TRGljdGlvbmFyeSBjbGFzc10pOworICAg
ICpvdXRWYWx1ZSA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgYWxsb2NdIGlu
aXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30KKworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVz
dFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9j
b2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWly
aW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEludGVy
bmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgorI2ltcG9y
dCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29sSlNPTk9iamVjdFByaXZhdGUuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgorI2ltcG9ydCA8d3RmL0Fzc2VydGlv
bnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sVGVzdFR5cGVOZWVkaW5nQ2FzdAorCistIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2Fk
Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJz
dHJpbmciXSwgQCJzdHJpbmciKTsKKyAgICBzZWxmLnN0cmluZyA9IHBheWxvYWRbQCJzdHJpbmci
XTsKKworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtA
Im51bWJlciJdLCBAIm51bWJlciIpOworICAgIHNlbGYubnVtYmVyID0gW3BheWxvYWRbQCJudW1i
ZXIiXSBpbnRlZ2VyVmFsdWVdOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AiYW5pbWFscyJdLCBAImFuaW1hbHMiKTsKKyAgICBzZWxmLmFuaW1h
bHMgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHM+KHBh
eWxvYWRbQCJhbmltYWxzIl0pOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
Uk9QRVJUWShwYXlsb2FkW0AiaWRlbnRpZmllciJdLCBAImlkZW50aWZpZXIiKTsKKyAgICBzZWxm
LmlkZW50aWZpZXIgPSBbcGF5bG9hZFtAImlkIl0gaW50ZWdlclZhbHVlXTsKKworICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUFJPUEVSVFkocGF5bG9hZFtAInRyZWUiXSwgQCJ0cmVl
Iik7CisgICAgc2VsZi50cmVlID0gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBh
bGxvY10gaW5pdFdpdGhQYXlsb2FkOnBheWxvYWRbQCJ0cmVlIl1dOworCisgICAgcmV0dXJuIHNl
bGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpT
T05PYmplY3QgKilqc29uT2JqZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0
aEluc3BlY3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBzZWxmOworfQorCistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIG51bWJlcjooaW50KW51bWJl
ciBhbmltYWxzOihUZXN0UHJvdG9jb2xUZXN0Q2FzdGVkQW5pbWFscylhbmltYWxzIGlkZW50aWZp
ZXI6KGludClpZGVudGlmaWVyIHRyZWU6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3Qx
ICopdHJlZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShzdHJp
bmcsIEAic3RyaW5nIik7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJU
WSh0cmVlLCBAInRyZWUiKTsKKworICAgIHNlbGYuc3RyaW5nID0gc3RyaW5nOworICAgIHNlbGYu
bnVtYmVyID0gbnVtYmVyOworICAgIHNlbGYuYW5pbWFscyA9IGFuaW1hbHM7CisgICAgc2VsZi5p
ZGVudGlmaWVyID0gaWRlbnRpZmllcjsKKyAgICBzZWxmLnRyZWUgPSB0cmVlOworCisgICAgcmV0
dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0U3RyaW5nOihOU1N0cmluZyAqKXN0cmluZworewor
ICAgIFtzdXBlciBzZXRTdHJpbmc6c3RyaW5nIGZvcktleTpAInN0cmluZyJdOworfQorCistIChO
U1N0cmluZyAqKXN0cmluZworeworICAgIHJldHVybiBbc3VwZXIgc3RyaW5nRm9yS2V5OkAic3Ry
aW5nIl07Cit9CisKKy0gKHZvaWQpc2V0TnVtYmVyOihpbnQpbnVtYmVyCit7CisgICAgW3N1cGVy
IHNldEludGVnZXI6bnVtYmVyIGZvcktleTpAIm51bWJlciJdOworfQorCistIChpbnQpbnVtYmVy
Cit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAibnVtYmVyIl07Cit9CisKKy0g
KHZvaWQpc2V0QW5pbWFsczooVGVzdFByb3RvY29sVGVzdENhc3RlZEFuaW1hbHMpYW5pbWFscwor
eworICAgIFtzdXBlciBzZXRTdHJpbmc6dG9Qcm90b2NvbFN0cmluZyhhbmltYWxzKSBmb3JLZXk6
QCJhbmltYWxzIl07Cit9CisKKy0gKFRlc3RQcm90b2NvbFRlc3RDYXN0ZWRBbmltYWxzKWFuaW1h
bHMKK3sKKyAgICByZXR1cm4gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFRlc3RDYXN0
ZWRBbmltYWxzPihbc3VwZXIgc3RyaW5nRm9yS2V5OkAiYW5pbWFscyJdKTsKK30KKworLSAodm9p
ZClzZXRJZGVudGlmaWVyOihpbnQpaWRlbnRpZmllcgoreworICAgIFtzdXBlciBzZXRJbnRlZ2Vy
OmlkZW50aWZpZXIgZm9yS2V5OkAiaWQiXTsKK30KKworLSAoaW50KWlkZW50aWZpZXIKK3sKKyAg
ICByZXR1cm4gW3N1cGVyIGludGVnZXJGb3JLZXk6QCJpZCJdOworfQorCistICh2b2lkKXNldFRy
ZWU6KFRlc3RQcm90b2NvbFRlc3RSZWN1cnNpdmVPYmplY3QxICopdHJlZQoreworICAgIFtzdXBl
ciBzZXRPYmplY3Q6dHJlZSBmb3JLZXk6QCJ0cmVlIl07Cit9CisKKy0gKFRlc3RQcm90b2NvbFRl
c3RSZWN1cnNpdmVPYmplY3QxICopdHJlZQoreworICAgIHJldHVybiBbW1Rlc3RQcm90b2NvbFRl
c3RSZWN1cnNpdmVPYmplY3QxIGFsbG9jXSBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbW3N1cGVy
IG9iamVjdEZvcktleTpAInRyZWUiXSB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldOworfQorCitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MQor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxO
U1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLm9iaiA9IFtbVGVzdFByb3RvY29s
VGVzdFJlY3Vyc2l2ZU9iamVjdDIgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkW0Aib2Jq
Il1dOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhKU09O
T2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2JqZWN0Cit7CisgICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpbanNvbk9iamVjdCB0b0luc3Bl
Y3Rvck9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKXNldE9iajooVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVj
dDIgKilvYmoKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0Om9iaiBmb3JLZXk6QCJvYmoiXTsKK30K
KworLSAoVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDIgKilvYmoKK3sKKyAgICByZXR1
cm4gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MiBhbGxvY10gaW5pdFdpdGhJbnNw
ZWN0b3JPYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoiXSB0b0luc3BlY3Rvck9iamVj
dF0uZ2V0KCldOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xUZXN0
UmVjdXJzaXZlT2JqZWN0MgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25u
dWxsIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBzZWxmLm9i
aiA9IFtbVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEgYWxsb2NdIGluaXRXaXRoUGF5
bG9hZDpwYXlsb2FkW0Aib2JqIl1dOworCisgICAgcmV0dXJuIHNlbGY7Cit9CistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhKU09OT2JqZWN0OihSV0lQcm90b2NvbEpTT05PYmplY3QgKilqc29uT2Jq
ZWN0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEluc3BlY3Rvck9iamVjdDpb
anNvbk9iamVjdCB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE9iajooVGVzdFByb3RvY29s
VGVzdFJlY3Vyc2l2ZU9iamVjdDEgKilvYmoKK3sKKyAgICBbc3VwZXIgc2V0T2JqZWN0Om9iaiBm
b3JLZXk6QCJvYmoiXTsKK30KKworLSAoVGVzdFByb3RvY29sVGVzdFJlY3Vyc2l2ZU9iamVjdDEg
KilvYmoKK3sKKyAgICByZXR1cm4gW1tUZXN0UHJvdG9jb2xUZXN0UmVjdXJzaXZlT2JqZWN0MSBh
bGxvY10gaW5pdFdpdGhJbnNwZWN0b3JPYmplY3Q6W1tzdXBlciBvYmplY3RGb3JLZXk6QCJvYmoi
XSB0b0luc3BlY3Rvck9iamVjdF0uZ2V0KCldOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXdpdGgtaW52
YWxpZC1wbGF0Zm9ybS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1jb21tYW5kLXdpdGgtaW52YWxpZC1wbGF0Zm9ybS5q
c29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmExODBjYWU5YmZmOGRhMjRmMDZjZjIxMDVlZDU5ODQ1NGNmNWVjZmIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWNvbW1hbmQtd2l0aC1pbnZhbGlkLXBsYXRmb3JtLmpz
b24KQEAgLTAsMCArMSwxNiBAQAoreworICAgICJkb21haW4iOiAiT3ZlcmxheSIsCisgICAgImNv
bW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJwcm9jZXNzUG9pbnRz
IiwKKyAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJpbnZhbGlkIiwKKyAgICAgICAgICAgICJwYXJh
bWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQxIiwgInR5cGUiOiAi
bnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQyIiwgInR5cGUiOiAi
bnVtYmVyIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAg
ICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZG9tYWluLWF2
YWlsYWJpbGl0eS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kb21haW4tYXZhaWxhYmlsaXR5Lmpzb24KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMzZlZTJjNjAwMTgwYmUwYWUxMzU5NDBiNDQ3ZTE4ODcxZDI3YWViNwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2ZhaWwtb24tZG9tYWluLWF2YWlsYWJpbGl0eS5qc29uCkBAIC0wLDAgKzEsOSBAQAorewor
ICAgICJkb21haW4iOiAiV2ViT25seSIsCisgICAgImF2YWlsYWJpbGl0eSI6ICJ3ZWJiIiwKKyAg
ICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImVuYWJsZSIK
KyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQt
Y2FsbC1wYXJhbWV0ZXItbmFtZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtY2FsbC1w
YXJhbWV0ZXItbmFtZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYWI3NmNhNjI3OWNlM2E0YWNmNzk4NTUw
MGIzMGI3ZDFjZmI4ZjBkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtY29tbWFu
ZC1jYWxsLXBhcmFtZXRlci1uYW1lcy5qc29uCkBAIC0wLDAgKzEsMTYgQEAKK3sKKyAgICAiZG9t
YWluIjogIk92ZXJsYXkiLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAg
ICAgIm5hbWUiOiAicHJvY2Vzc1BvaW50cyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBvaW50IiwgInR5cGUiOiAibnVtYmVyIiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0KKyAg
ICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInJlc3VsdDEiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJyZXN1bHQyIiwgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAgICBdCisg
ICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21tYW5kLXJl
dHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLWNvbW1hbmQtcmV0dXJu
LXBhcmFtZXRlci1uYW1lcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4YmIxNWMwNGI2NTliOWNiOWFmZGUz
NGNkNTcyMmJhOWM2ZDRkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1jb21t
YW5kLXJldHVybi1wYXJhbWV0ZXItbmFtZXMuanNvbgpAQCAtMCwwICsxLDE2IEBACit7CisgICAg
ImRvbWFpbiI6ICJPdmVybGF5IiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJuYW1lIjogInByb2Nlc3NQb2ludHMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMi
OiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludDEiLCAidHlwZSI6ICJudW1iZXIi
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwb2ludDIiLCAidHlwZSI6ICJudW1iZXIi
IH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInJlc3VsdCIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInJlc3VsdCIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAg
XQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQt
cGFyYW1ldGVyLW5hbWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWR1cGxpY2F0ZS1ldmVudC1wYXJhbWV0ZXItbmFt
ZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kM2QzYjNjYzY0MjNjZWMyNWE2N2RhOTEzMmE3NjY4Njc1NWE0
NDQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtZXZlbnQtcGFyYW1ldGVyLW5h
bWVzLmpzb24KQEAgLTAsMCArMSwxMiBAQAoreworICAgICJkb21haW4iOiAiT3ZlcmxheSIsCisg
ICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAicHJvY2Vzc2Vk
UG9pbnRzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicG9pbnQiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwb2ludCIsICJ0eXBlIjogIm51bWJlciIgfQorICAgICAgICAgICAgXQorICAgICAg
ICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlv
bnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNzAyZmM2YTMyNzBhNjQ2YTQ1MDQ0N2ZkYzA0MDEzOTk1YTk0MmJmMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24KQEAgLTAsMCArMSwx
NSBAQAoreworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5
cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0
IGlkZW50aWZpZXIuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
UmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9
CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1tZW1iZXItbmFtZXMu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YWViYWNlZThiMjNlMWVhMzQwNWQ4YWMwYTAwMTYyMDcwMTBjOTQ4NQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtbWVtYmVyLW5hbWVzLmpzb24KQEAgLTAsMCArMSwxNSBA
QAorWworeworICAgICJkb21haW4iOiAiT3ZlcmxheVR5cGVzIiwKKyAgICAidHlwZXMiOiBbCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQb2ludCIsCisgICAgICAgICAgICAidHlwZSI6
ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ4IiwgInR5cGUiOiAiaW50ZWdlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIngiLCAidHlwZSI6ICJpbnRlZ2VyIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0K
KyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzMmE3YzMyNDlhNDBi
ZDQ0N2UxOWE5MmE4ZTU2OTMwZDNmODU5NTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLWVudW0t
d2l0aC1uby12YWx1ZXMuanNvbgpAQCAtMCwwICsxLDEwIEBACit7CisgICAgImRvbWFpbiI6ICJE
YXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
UHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAg
ICAgImVudW0iOiBbXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1udW1i
ZXItdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tbnVtYmVyLXR5cGVk
LW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzMwOGRiOTkyZDY1MjU3
ZjJiNWM2MzI3ZTBjYTM1NDUwMmQ2MTU0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tbnVtYmVy
LXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24KQEAgLTAsMCArMSwxOCBAQAorewor
ICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5n
IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRh
YmFzZSBvYmplY3QuIgorICAgICAgICB9CisgICAgXSwKKyAgICAiZXZlbnRzIjogWworICAgICAg
ICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwK
KyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
Y29sdW1uTmFtZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiAwIH0KKyAgICAgICAg
ICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tbnVtYmVyLXR5cGVk
LW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25hbC10
eXBlLW1lbWJlci5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmZWE1NTVlYzRmZTA4NjYyNzhlMWZjZDczMzU0
MjQyZGVmZDFiZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLW51bWJlci10eXBlZC1vcHRpb25h
bC10eXBlLW1lbWJlci5qc29uCkBAIC0wLDAgKzEsMTYgQEAKK1sKK3sKKyAgICAiZG9tYWluIjog
IkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6
IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmci
LCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBj
b2RlLiIsICJvcHRpb25hbCI6IDAgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQor
fQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZs
YWcuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDAxMmM3OWI2YjM4YzIxZGZmNjA3ZmVjOWVlOTBiMjgwMzEwZjkwOAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFn
Lmpzb24KQEAgLTAsMCArMSwxOCBAQAoreworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAg
ICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAor
ICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9CisgICAg
XSwKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaWRF
eGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJzdHJpbmci
LCAib3B0aW9uYWwiOiAidHJ1ZSIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uY2EzZWYyOGE4Zjg4MTRjYzYxN2ZiNWQ1YmMyMTMwNmQwYWFkNGZkMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KQEAgLTAs
MCArMSwxNiBAQAorWworeworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0
eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJy
b3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBt
ZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJp
bnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiwgIm9wdGlvbmFsIjogImZhbHNl
IiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWls
LW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlw
ZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5Yjc1
OTBjY2M2ZjZiYzM0NDNhNGEyODNjYTZmY2NmZGYzMjc3MzQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWls
LW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgpAQCAtMCwwICsx
LDEzIEBACitbCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAg
ICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgIiRyZWYiOiAiU29tZVR5cGUiLAorICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAg
ICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXBy
aW1pdGl2ZS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtcmVmZXJlbmNlLWFzLXByaW1pdGl2ZS10eXBl
Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOGM4M2JiZmNlNDEyYjhiMDlkZjc0N2E4NzVlODAzNmRmZWNjYmMz
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS1yZWZlcmVuY2UtYXMtcHJpbWl0aXZlLXR5
cGUuanNvbgpAQCAtMCwwICsxLDE4IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisg
ICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIs
CisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0KKyAg
ICBdLAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRp
ZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBb
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogIkRhdGFi
YXNlSWQiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2Zh
aWwtb24tdHlwZS13aXRoLWludmFsaWQtcGxhdGZvcm0uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdHlwZS13aXRoLWlu
dmFsaWQtcGxhdGZvcm0uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOWZkMmU5OTU2MWRlMGNlM2M3NjZlZTY4
ODIxY2EyM2M2NGQ1YzkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi10eXBlLXdpdGgtaW52YWxp
ZC1wbGF0Zm9ybS5qc29uCkBAIC0wLDAgKzEsMTEgQEAKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRp
bWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90
ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAi
cGxhdGZvcm0iOiAiaW52YWxpZCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVl
IG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwt
b24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNh
c2UtbmFtZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUzMTkwMWU0YTlhZDk5MzZiMDFiYmFlZDk3YTFkNGRh
MzQ4NDc4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFt
ZS5qc29uCkBAIC0wLDAgKzEsMTAgQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAg
ICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJkYXRhYmFzZUlkIiwK
KyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0KKyAg
ICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1k
ZWNsYXJhdGlvbi5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVj
bGFyYXRpb24uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjg4N2EyNzQxMTkwMGE4MGQ1MGYwMDNlYWMzNmMx
M2E5OWZhZTU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNl
LWluLXR5cGUtZGVjbGFyYXRpb24uanNvbgpAQCAtMCwwICsxLDEyIEBACitbCit7CisgICAgImRv
bWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJkcmFnb24iLAor
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisg
ICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZl
cmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1p
bi10eXBlLW1lbWJlci5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI4MTdkYjUwNDRkYzFmMjg1NTcwMDhjMWYx
NzYxZjFiMDY4ZjRjZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZl
cmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbgpAQCAtMCwwICsxLDE1IEBACitbCit7CisgICAgImRv
bWFpbiI6ICJGYW50YXN5IiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJEcmFnb25FZ2ciLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIGRyYWdvbiBlZ2cuIiwKKyAgICAgICAgICAgICJwcm9w
ZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sb3IiLCAiJHJlZiI6ICJD
b2xvciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
Z2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9nZW5lcmF0ZS1kb21haW5z
LXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42N2NmOGU1ODJmNjVhZTZmYzYx
NTY5Mjg4MmNiMGY2NTc0NjAxMDhhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZ2VuZXJhdGUtZG9tYWlucy13
aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24KQEAgLTAsMCArMSwzNiBAQAorWworeworICAgICJkb21h
aW4iOiAiTmV0d29yazEiLAorICAgICJmZWF0dXJlR3VhcmQiOiAiUExBVEZPUk0oV0VCX0NPTU1B
TkRTKSIsCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6
ICJsb2FkUmVzb3VyY2UiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVz
b3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0
aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAg
ImRvbWFpbiI6ICJOZXR3b3JrMiIsCisgICAgImZlYXR1cmVHdWFyZCI6ICJQTEFURk9STShXRUJf
VFlQRVMpIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJO
ZXR3b3JrRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAg
ICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0
eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0
aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9
LAoreworICAgICJkb21haW4iOiAiTmV0d29yazMiLAorICAgICJmZWF0dXJlR3VhcmQiOiAiUExB
VEZPUk0oV0VCX0VWRU5UUykiLAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJuYW1lIjogInJlc291cmNlTG9hZGVkIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJBIHJlc291cmNlIHdhcyBsb2FkZWQuIgorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3NhbWUtdHlwZS1pZC1kaWZmZXJl
bnQtZG9tYWluLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2JmNGRmZjVjY2MyOWQwZThjMWZhNGIyZGQzMjgz
ZTc3MTYzMmM3ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWlu
Lmpzb24KQEAgLTAsMCArMSwyMiBAQAorWworeworICAgICJkb21haW4iOiAiUnVudGltZSIsCisg
ICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0
SWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfSwK
K3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUyIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6
ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRl
bnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9zaGFkb3dlZC1vcHRp
b25hbC10eXBlLXNldHRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29u
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjIwYTBjMTU1Mjc1MGY2MjgyODhjZmY0MTkzOTZiZDZmNmFmNzQ5ZmUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgpAQCAtMCww
ICsxLDMxIEBACit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJLZXlQYXRoIiwKKyAgICAgICAgICAgICJ0eXBl
IjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiS2V5IHBhdGguIiwKKyAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgIm5hbWUiOiAidHlwZSIsCisgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0
cmluZyIsCisgICAgICAgICAgICAgICAgICAgICJlbnVtIjogWyJudWxsIiwgInN0cmluZyIsICJh
cnJheSJdLAorICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiS2V5IHBhdGggdHlw
ZS4iCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICJuYW1lIjogInN0cmluZyIsCisgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0
cmluZyIsCisgICAgICAgICAgICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAgICAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTdHJpbmcgdmFsdWUuIgorICAgICAgICAgICAgICAg
IH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJhcnJh
eSIsCisgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICAg
ICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgIml0ZW1zIjogeyAi
dHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJB
cnJheSB2YWx1ZS4iCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9
CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10
eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jYmM5ZDUzOTQ3OGRiNDk1Yzk2MDY3ZWNkNTRhOTViZTUyZjhkMDcwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KQEAg
LTAsMCArMSwxMCBAQAoreworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjog
WworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAg
ICAgICAgInR5cGUiOiAiaW50ZWdlciIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5p
cXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBl
Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uY2ZiMDhiZDk0MGI2NGZiNjYwMzk2NWNlMWIwNGQzZmM5NzQ5ZWE5
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCkBAIC0w
LDAgKzEsNTAgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRlYnVnZ2VyIiwKKyAgICAidHlwZXMi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJCcmVha3BvaW50SWQiLAorICAgICAg
ICAgICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIlJlYXNvbiIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAg
ICAgICAgImVudW0iOiBbIkRpZWQiLCAiRmFpbnRlZCIsICJIdW5ncnkiXQorICAgICAgICB9Cisg
ICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIk9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBl
IjogImludGVnZXIiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJM
dWNreU51bWJlcnMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAg
Iml0ZW1zIjogeyAidHlwZSI6ICJpbnRlZ2VyIiB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJCYWJ5TmFtZXMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXki
LAorICAgICAgICAgICAgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk5ld09iamVjdHMiLAorICAgICAgICAgICAg
InR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJPYmplY3RJ
ZCIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiT2xkT2JqZWN0
cyIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7
ICIkcmVmIjogIkRlYnVnZ2VyLkJyZWFrcG9pbnRJZCIgfQorICAgICAgICB9LAorICAgICAgICB7
CisgICAgICAgICAgICAiaWQiOiAiU3RvcFJlYXNvbnMiLAorICAgICAgICAgICAgInR5cGUiOiAi
YXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJEZWJ1Z2dlci5SZWFzb24i
IH0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtZGVjbGFyYXRpb24tZW51
bS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlm
MGFlZTljOTFiOTVhYmFmMzg3ZTcyYTkxYTMzMzhiNTc5ZGE5YWEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90
eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCkBAIC0wLDAgKzEsMTUgQEAKK3sKKyAgICAi
ZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIkZhcm1BbmltYWxzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisg
ICAgICAgICAgICAiZW51bSI6IFsiUGlncyIsICJDb3dzIiwgIkNhdHMiLCAiSGVucyJdCisgICAg
ICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJUd29MZWdnZWRBbmltYWxzIiwK
KyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsiRHVj
a3MiLCAiSGVucyIsICJDcm93cyIsICJGbGFtaW5nb3MiXQorICAgICAgICB9CisgICAgXQorfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvdHlwZS1kZWNsYXJhdGlv
bi1vYmplY3QtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE3ODMwOTE5NzNiY2YzNzU0NWNkNzU5NjA5
MTg2N2Y4Y2EyNWQ4NWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10
eXBlLmpzb24KQEAgLTAsMCArMSw4MyBAQAorWworeworICAgICJkb21haW4iOiAiRGF0YWJhc2Ui
LAorICAgICJkZXNjcmlwdGlvbiI6ICJUZXN0IHR5cGUgYnVpbGRlciBnZW5lcmF0aW9uIG9mIHZh
cmlvdXMgb2JqZWN0IHR5cGVzLiIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInBy
b3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUi
OiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24i
OiAiRXJyb3IgY29kZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgImlkIjogIkVycm9yTGlzdCIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJh
eSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIkVycm9yIiB9CisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSIs
CisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMi
OiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFy
cmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwg
InR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRp
b25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yIiwgIiRyZWYi
OiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJlcnJvckxpc3QiLCAiJHJlZiI6ICJFcnJvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAg
ICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlBh
cmFtZXRlckJ1bmRsZSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAg
ICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1l
cyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvckxpc3QiLCAiJHJlZiI6ICJFcnJvckxpc3QiIH0K
KyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
Ik9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMiLAorICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkNvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRl
cnMgdG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4iLAorICAg
ICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaW50ZWdlciIsICJ0eXBlIjogInN0cmluZyIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFycmF5IiwgInR5cGUiOiAic3RyaW5nIiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RyaW5nIiwgInR5cGUiOiAic3RyaW5nIiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWUiLCAidHlwZSI6ICJzdHJpbmciIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmplY3QiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAg
ICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkR1
bW15T2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBbiBvcGVuIG9iamVjdCB0
aGF0IGRvZXNuJ3QgaGF2ZSBhbnkgcHJlZGVmaW5lZCBmaWVsZHMuIiwKKyAgICAgICAgICAgICJ0
eXBlIjogIm9iamVjdCIKKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJU
ZXN0IiwKKyAgICAiZGVzY3JpcHRpb24iOiAiVGVzdCB0aGUgZ2VuZXJhdGlvbiBvZiBzcGVjaWFs
IGJlaGF2aW9ycyB0aGF0IG9ubHkgYXBwbHkgdG8gc3BlY2lmaWMgY2xhc3Nlcy4iLAorICAgICJ0
eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlBhcmFtZXRlckJ1bmRsZSIs
CisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMi
OiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFy
cmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImVycm9yIiwgIiRyZWYiOiAiRGF0YWJhc2UuRXJyb3IiIH0KKyAgICAgICAgICAg
IF0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL3R5cGUtcmVxdWlyaW5nLXJ1bnRp
bWUtY2FzdHMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44M2Q5NGJlODk3ZDIyY2MwNThiYjY0NmZlY2Q5YTQ3MzAzN2I2YjkyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCkBAIC0wLDAgKzEsNTEgQEAKK1sK
K3sKKyAgICAiZG9tYWluIjogIlRlc3QiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIlR5cGVOZWVkaW5nQ2FzdCIsCisgICAgICAgICAgICAidHlwZSI6ICJv
YmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgZHVtbXkgdHlwZSB0aGF0IHJl
cXVpcmVzIHJ1bnRpbWUgY2FzdHMsIGFuZCBmb3JjZXMgbm9uLXByaW1pdGl2ZSByZWZlcmVuY2Vk
IHR5cGVzIHRvIGFsc28gZW1pdCBydW50aW1lIGNhc3QgaGVscGVycy4iLAorICAgICAgICAgICAg
InByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdHJpbmciLCAidHlw
ZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiU3RyaW5nIG1lbWJlci4iIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJudW1iZXIiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0
aW9uIjogIk51bWJlciBtZW1iZXIuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYW5p
bWFscyIsICIkcmVmIjogIkNhc3RlZEFuaW1hbHMiLCAiZGVzY3JpcHRpb24iOiAiRW51bSBtZW1i
ZXIuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaWQiLCAiJHJlZiI6ICJDYXN0ZWRP
YmplY3RJZCIsICJkZXNjcmlwdGlvbiI6ICJBbGlhc2VkIG1lbWJlci4iIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJ0cmVlIiwgIiRyZWYiOiAiUmVjdXJzaXZlT2JqZWN0MSIsICJkZXNj
cmlwdGlvbiI6ICJSZWN1cnNpdmUgb2JqZWN0IG1lbWJlci4iIH0KKyAgICAgICAgICAgIF0KKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkNhc3RlZE9iamVjdElkIiwK
KyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJVbmNhc3RlZE9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjog
ImludGVnZXIiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJVbmNh
c3RlZEFuaW1hbHMiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAg
ICJlbnVtIjogWyJQaWdzIiwgIkNvd3MiLCAiQ2F0cyIsICJIZW5zIl0KKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIkNhc3RlZEFuaW1hbHMiLAorICAgICAgICAgICAg
InR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJEdWNrcyIsICJIZW5zIiwg
IkNyb3dzIiwgIkZsYW1pbmdvcyJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJSZWN1cnNpdmVPYmplY3QxIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIs
CisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
Im9iaiIsICIkcmVmIjogIlJlY3Vyc2l2ZU9iamVjdDIiLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAg
ICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJl
Y3Vyc2l2ZU9iamVjdDIiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAg
ICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib2JqIiwgIiRy
ZWYiOiAiUmVjdXJzaXZlT2JqZWN0MSIsICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAg
XQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2lvcy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2lvcy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxN2Yx
MzVlZTVhNzIwOTdhZTNlMTMxYmRkNDBlNjAxNjk4YWIxMGMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvaW9zL2RlZmluaXRp
b25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KQEAgLTAsMCArMSwyOCBAQAoreworICAgICJkb21h
aW4iOiAiTmV0d29yayIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAi
aWQiOiAiTmV0d29ya0Vycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAg
ICAgICAgICAicGxhdGZvcm0iOiAibWFjb3MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwg
ImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29k
ZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbW1hbmRzIjog
WworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UiLAorICAgICAg
ICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJM
b2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3Rl
ZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0KKyAgICBdLAor
ICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogInJlc291cmNl
TG9hZGVkIiwKKyAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCisgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiQSByZXNvdXJjZSB3YXMgbG9hZGVkLiIKKyAgICAgICAgfQorICAgIF0K
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9pb3MvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1
bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvaW9zL2V4
cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjBmYWRiYTdiNzQ1NDQ4M2Q3NDA5ZWE2NjdkZTc2ZGFiOWU2ZTRkZjgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvaW9z
L2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CkBAIC0w
LDAgKzEsODM1IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpz
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMt
cGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJl
ZlB0cjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNo
ZXIgPSBXVEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tl
bmREaXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsg
fQorcHJpdmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3Bh
dGNoZXI7Cit9OworCisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorIyMjIEVuZCBGaWxlOiBU
ZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3Bw
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitjbGFzcyBGcm9udGVuZFJvdXRlcjsKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNp
bmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgUHJv
dG9jb2wgeworCisKKworCisKKworCit9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmNwcAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKKworI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK25hbWVzcGFjZSBQcm90b2NvbCB7CisKKworCit9IC8vIG5hbWVzcGFjZSBQ
cm90b2NvbAorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKwor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25m
aWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorCisjIyMg
QmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxXZWJJbnNw
ZWN0b3IvVGVzdFByb3RvY29sLmg+CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uIDogTlNPYmplY3QK
K0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisj
IyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uLmgiCisKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FsdGVybmF0ZURpc3BhdGNoYWJs
ZUFnZW50Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BdWdtZW50YWJsZUluc3BlY3RvckNv
bnRyb2xsZXIuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK0BpbXBs
ZW1lbnRhdGlvbiBUZXN0UHJvdG9jb2xDb25maWd1cmF0aW9uCit7CisgICAgQXVnbWVudGFibGVJ
bnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJvbGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWlu
aXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9s
bGVyCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0g
Y29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7Cisg
ICAgW3N1cGVyIGRlYWxsb2NdOworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xDb25maWd1cmF0aW9uLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xFdmVu
dERpc3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bEludGVybmFsLmgiCisKKyNpbXBvcnQgIlRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5oIgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xFdmVudERpc3Bh
dGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2wuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3QuaD4KKworCisKKworCisKKworCisKKworCisKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBs
YXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2JqZWN0
UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4K
KworCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdp
biBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25z
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51
bVR5cGU+CitPYmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWUpOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlw
ZUNvbnZlcnNpb25zLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlRlc3RQcm90b2Nv
bFR5cGVDb252ZXJzaW9ucy5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2wuaCIKKyNpbXBvcnQg
IlRlc3RQcm90b2NvbFR5cGVQYXJzZXIuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90
b2NvbEpTT05PYmplY3RQcml2YXRlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisK
KworCisKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucy5tbQor
CisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3Rv
Y29sVHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFs
dWVzLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOworCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZXMubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44MTdmMTM1ZWU1YTcyMDk3YWUzZTEzMWJkZDQwZTYwMTY5OGFiMTBj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL21hYy9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCkBAIC0wLDAg
KzEsMjggQEAKK3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmsiLAorICAgICJ0eXBlcyI6IFsKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIk5ldHdvcmtFcnJvciIsCisgICAgICAgICAgICAi
dHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInBsYXRmb3JtIjogIm1hY29zIiwKKyAgICAg
ICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2Fn
ZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRl
c2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAg
ICBdLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAi
bG9hZFJlc291cmNlIiwKKyAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJtYWNvcyIsCisgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBh
IGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3Mu
IgorICAgICAgICB9CisgICAgXSwKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAg
ICAgICAibmFtZSI6ICJyZXNvdXJjZUxvYWRlZCIsCisgICAgICAgICAgICAicGxhdGZvcm0iOiAi
bWFjb3MiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgcmVzb3VyY2Ugd2FzIGxvYWRl
ZC4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvbWFjL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL21hYy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZjM0OGYyYThhNWY5OWQ1NGEwYzUyNDQ1NDU2YjQ5
ZjY3NjdiNDVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL21hYy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDExNzIgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIE5ldHdvcmsuCitJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyTmV0d29ya0Rpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWlu
RGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJOZXR3b3JrIik7CitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRXZlbnQoIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiLCBbXSk7CitJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yay5sb2FkUmVzb3VyY2UiLCBbXSwg
W10pOworSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yayIpOworIyMjIEVu
ZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEJhY2tlbmREaXNwYXRjaGVyKFJlZlB0cjxC
YWNrZW5kRGlzcGF0Y2hlcj4mJiBkaXNwYXRjaGVyKSB7IG1fYmFja2VuZERpc3BhdGNoZXIgPSBX
VEZNb3ZlKGRpc3BhdGNoZXIpOyB9CisgICAgQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kRGlzcGF0Y2hlci5nZXQoKTsgfQorcHJp
dmF0ZToKKyAgICBSZWZQdHI8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7
Cit9OworCisKK2NsYXNzIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciA6IHB1Ymxp
YyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QWx0
ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZShsb25nIGNhbGxJZCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
KyMjIyBFbmQgRmlsZTogVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK2NsYXNzIEFsdGVy
bmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjsKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworY2xhc3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0
cmluZyYpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5OZXR3b3JrQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmlu
YWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3Bh
dGNoZXImLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdm9pZCBkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JP
YmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIHZvaWQgbG9hZFJlc291
cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMp
OworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorcHVibGljOgor
ICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0g
YWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQorcHJpdmF0ZToKKyAgICBBbHRlcm5hdGVOZXR3b3JrQmFj
a2VuZERpc3BhdGNoZXIqIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciB7IG51bGxwdHIgfTsKKyNlbmRp
ZgorcHJpdmF0ZToKKyAgICBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNo
ZXImLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudCB7IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
KworIyMjIEJlZ2luIEZpbGU6IFRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CisjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6fk5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7
IH0KKworUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29ya0JhY2tlbmREaXNwYXRj
aGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBOZXR3b3Jr
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7
Cit9CisKK05ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
KEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29ya0JhY2tlbmREaXNw
YXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
cihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgi
TmV0d29yayIpLCB0aGlzKTsKK30KKwordm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rv
ck9iamVjdD4mJiBtZXNzYWdlKQoreworICAgIFJlZjxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+
IHByb3RlY3QoKnRoaXMpOworCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVy
czsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1l
dGVycyk7CisKKyAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKQorICAgICAgICBsb2Fk
UmVzb3VyY2UocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcJycsICJOZXR3b3JrIiwgJy4nLCBt
ZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7Cit9CisKK3ZvaWQgTmV0d29ya0JhY2tlbmREaXNw
YXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiYpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisg
ICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeworICAgICAgICBtX2FsdGVybmF0ZURpc3Bh
dGNoZXItPmxvYWRSZXNvdXJjZShyZXF1ZXN0SWQpOworICAgICAgICByZXR1cm47CisgICAgfQor
I2VuZGlmCisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRS
ZXNvdXJjZShlcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCkp
OworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1h
Yy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK2NsYXNzIEZyb250ZW5kUm91
dGVyOworCitjbGFzcyBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBO
ZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikg
OiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KKyAgICB2b2lkIHJlc291cmNl
TG9hZGVkKCk7Citwcml2YXRlOgorICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVy
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3ZvaWQg
TmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQoreworICAgIFJlZjxJ
bnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJ
TGl0ZXJhbCgiTmV0d29yay5yZXNvdXJjZUxvYWRlZCIpKTsKKworICAgIG1fZnJvbnRlbmRSb3V0
ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmNwcAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+CisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCitu
YW1lc3BhY2UgUHJvdG9jb2wgeworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFj
ZSBOZXR3b3JrIHsKK2NsYXNzIE5ldHdvcmtFcnJvcjsKK30gLy8gTmV0d29yaworLy8gRW5kIG9m
IGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCituYW1lc3BhY2UgTmV0d29yayB7CitjbGFz
cyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsK
K3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBN
ZXNzYWdlU2V0ID0gMSA8PCAwLAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAorICAgICAgICBB
bGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKworICAgIHRlbXBs
YXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFJlZjwvKk5ldHdvcmtFcnJv
ciovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RG
TW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAg
ICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgTmV0d29ya0Vycm9yOworICAgIHB1YmxpYzoK
KworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKKyAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXNzYWdlIiksIHZhbHVl
KTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAg
fQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0
KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
SW50ZWdlcihBU0NJSUxpdGVyYWwoImNvZGUiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxDb2RlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgUmVmPE5ldHdvcmtF
cnJvcj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoTmV0d29ya0Vycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yT2Jq
ZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIFdU
Rk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE5ldHdvcmtFcnJvcj4qPigmcmVzdWx0KSk7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
CisgICAgICogUmVmPE5ldHdvcmtFcnJvcj4gcmVzdWx0ID0gTmV0d29ya0Vycm9yOjpjcmVhdGUo
KQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRDb2RlKC4uLikK
KyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0Zp
ZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRz
U2V0PihJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCit9IC8vIE5ldHdv
cmsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
bmFtZXNwYWNlIFByb3RvY29sIHsKKworCisKK30gLy8gbmFtZXNwYWNlIFByb3RvY29sCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9iamVj
dHMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworQHByb3RvY29sIFRlc3RQ
cm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
CitjbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVi
bGljIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgT2Jq
Q0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3Jr
RG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQorICAgIHZp
cnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRlOworcHJpdmF0
ZToKKyAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+PiBt
X2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IFRl
c3RQcm90b2NvbEJhY2tlbmREaXNwYXRjaGVycy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJUZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbEludGVybmFsLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25z
LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWVzLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3Bh
dGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkKK3sKKyAgICBpZCBlcnJvckNhbGxi
YWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOworICAgIH07CisKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpKTsKKyAgICB9OworCisgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlV2l0
aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxi
YWNrXTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBU
ZXN0UHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQ
cm90b2NvbENvbmZpZ3VyYXRpb24uaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1Rlc3RQcm90b2Nv
bC5oPgorCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKK0BpbnRlcmZh
Y2UgVGVzdFByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0
b21pYywgcmV0YWluLCBzZXR0ZXI9c2V0TmV0d29ya0hhbmRsZXI6KSBpZDxUZXN0UHJvdG9jb2xO
ZXR3b3JrRG9tYWluSGFuZGxlcj4gbmV0d29ya0hhbmRsZXI7CitAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIgKm5l
dHdvcmtFdmVudERpc3BhdGNoZXI7CitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9j
b2xDb25maWd1cmF0aW9uLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3Vy
YXRpb24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13
aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGVzdFByb3RvY29sQ29uZmln
dXJhdGlvbi5oIgorCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAi
VGVzdFByb3RvY29sQmFja2VuZERpc3BhdGNoZXJzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9BbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCitAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sQ29uZmlndXJhdGlv
bgoreworICAgIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7Cisg
ICAgaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+IF9uZXR3b3JrSGFuZGxlcjsK
KyAgICBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyICpfbmV0d29ya0V2
ZW50RGlzcGF0Y2hlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjoo
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
QVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19uZXR3b3JrSGFuZGxl
ciByZWxlYXNlXTsKKyAgICBbX25ldHdvcmtFdmVudERpc3BhdGNoZXIgcmVsZWFzZV07CisgICAg
W3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNldE5ldHdvcmtIYW5kbGVyOihpZDxUZXN0
UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4paGFuZGxlcgoreworICAgIGlmIChoYW5kbGVy
ID09IF9uZXR3b3JrSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgW19uZXR3b3JrSGFu
ZGxlciByZWxlYXNlXTsKKyAgICBfbmV0d29ya0hhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOwor
CisgICAgYXV0byBhbHRlcm5hdGVEaXNwYXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxPYmpDSW5z
cGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVy
bmF0ZUFnZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
cj4+KEFTQ0lJTGl0ZXJhbCgiTmV0d29yayIpLCAqX2NvbnRyb2xsZXIsIFdURk1vdmUoYWx0ZXJu
YXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5hcHBlbmRFeHRyYUFnZW50KFdURk1v
dmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFp
bkhhbmRsZXI+KW5ldHdvcmtIYW5kbGVyCit7CisgICAgcmV0dXJuIF9uZXR3b3JrSGFuZGxlcjsK
K30KKworLSAoVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkV2ZW50RGlzcGF0Y2hlciAqKW5ldHdv
cmtFdmVudERpc3BhdGNoZXIKK3sKKyAgICBpZiAoIV9uZXR3b3JrRXZlbnREaXNwYXRjaGVyKQor
ICAgICAgICBfbmV0d29ya0V2ZW50RGlzcGF0Y2hlciA9IFtbVGVzdFByb3RvY29sTmV0d29ya0Rv
bWFpbkV2ZW50RGlzcGF0Y2hlciBhbGxvY10gaW5pdFdpdGhDb250cm9sbGVyOl9jb250cm9sbGVy
XTsKKyAgICByZXR1cm4gX25ldHdvcmtFdmVudERpc3BhdGNoZXI7Cit9CisKK0BlbmQKKworCisj
IyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbENvbmZpZ3VyYXRpb24ubW0KKworIyMjIEJlZ2luIEZp
bGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBkZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiVGVzdFByb3RvY29sSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1
ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxlbWVudGF0aW9uIFRl
c3RQcm90b2NvbE5ldHdvcmtEb21haW5FdmVudERpc3BhdGNoZXIKK3sKKyAgICBBdWdtZW50YWJs
ZUluc3BlY3RvckNvbnRyb2xsZXIqIF9jb250cm9sbGVyOworfQorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhDb250cm9sbGVyOihBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRy
b2xsZXI7Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVy
ID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClyZXNvdXJjZUxv
YWRlZAoreworICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+
ZnJvbnRlbmRSb3V0ZXIoKTsKKworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiTmV0d29yay5yZXNvdXJjZUxv
YWRlZCIpKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7Cit9CisKK0BlbmQKKworCisjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbEV2ZW50RGlzcGF0
Y2hlcnMubW0KKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbC5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVjdG9yL1JXSVByb3RvY29s
SlNPTk9iamVjdC5oPgorCisKK0BjbGFzcyBUZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3I7CisKKwor
CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorQGludGVyZmFjZSBU
ZXN0UHJvdG9jb2xOZXR3b3JrRXJyb3IgOiBSV0lQcm90b2NvbEpTT05PYmplY3QKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aFBheWxvYWQ6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilw
YXlsb2FkOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSlNPTk9iamVjdDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopanNvbk9iamVjdDsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE1lc3NhZ2U6
KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZTsKKy8qIHJlcXVpcmVkICovIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqbWVzc2FnZTsKKy8qIHJlcXVpcmVkICov
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGludCBjb2RlOworQGVuZAorCitAcHJvdG9j
b2wgVGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgorQHJlcXVpcmVk
CistICh2b2lkKWxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5n
ICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoKSlzdWNjZXNz
Q2FsbGJhY2s7CitAZW5kCisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0Iikp
KQorQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVyIDog
TlNPYmplY3QKKy0gKHZvaWQpcmVzb3VyY2VMb2FkZWQ7CitAZW5kCisKKworIyMjIEVuZCBGaWxl
OiBUZXN0UHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogVGVzdFByb3RvY29sSW50ZXJuYWwu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xKU09OT2Jq
ZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0
b3JDb250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMu
aD4KKworQGludGVyZmFjZSBUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluRXZlbnREaXNwYXRjaGVy
IChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9y
OjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xJbnRlcm5hbC5oCisKKyMjIyBCZWdpbiBGaWxlOiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisj
aW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25zLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitP
YmpDRW51bVR5cGUgZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zLmgKKworIyMjIEJlZ2luIEZpbGU6IFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucy5tbQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xUeXBl
Q29udmVyc2lvbnMuaCIKKworI2ltcG9ydCAiVGVzdFByb3RvY29sLmgiCisjaW1wb3J0ICJUZXN0
UHJvdG9jb2xUeXBlUGFyc2VyLmgiCisjaW1wb3J0IDxXZWJJbnNwZWN0b3IvUldJUHJvdG9jb2xK
U09OT2JqZWN0UHJpdmF0ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCitAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoTmV0d29ya0RvbWFpbikKKworKyAo
dm9pZClfcGFyc2VOZXR3b3JrRXJyb3I6KFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvciAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24g
VGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChOZXR3b3JrRG9tYWluKQorCisrICh2b2lkKV9w
YXJzZU5ldHdvcmtFcnJvcjooVGVzdFByb3RvY29sTmV0d29ya0Vycm9yICoqKW91dFZhbHVlIGZy
b21QYXlsb2FkOihpZClwYXlsb2FkCit7CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQ
RShwYXlsb2FkLCBbTlNEaWN0aW9uYXJ5IGNsYXNzXSk7CisgICAgKm91dFZhbHVlID0gW1tUZXN0
UHJvdG9jb2xOZXR3b3JrRXJyb3IgYWxsb2NdIGluaXRXaXRoUGF5bG9hZDpwYXlsb2FkXTsKK30K
KworQGVuZAorCisKKyMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zLm1t
CisKKyMjIyBCZWdpbiBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJUZXN0UHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJUZXN0UHJv
dG9jb2xUeXBlQ29udmVyc2lvbnMuaCIKKyNpbXBvcnQgPFdlYkluc3BlY3Rvci9SV0lQcm90b2Nv
bEpTT05PYmplY3RQcml2YXRlLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JW
YWx1ZXMuaD4KKyNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7CisKKworQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbE5ldHdvcmtFcnJvcgor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhQYXlsb2FkOihub25udWxsIE5TRGljdGlvbmFyeTxO
U1N0cmluZyAqLCBpZD4gKilwYXlsb2FkCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BST1BFUlRZKHBheWxvYWRbQCJtZXNzYWdlIl0sIEAibWVzc2FnZSIpOworICAgIHNlbGYu
bWVzc2FnZSA9IHBheWxvYWRbQCJtZXNzYWdlIl07CisKKyAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BST1BFUlRZKHBheWxvYWRbQCJjb2RlIl0sIEAiY29kZSIpOworICAgIHNlbGYu
Y29kZSA9IFtwYXlsb2FkW0AiY29kZSJdIGludGVnZXJWYWx1ZV07CisKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEpTT05PYmplY3Q6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKWpzb25PYmplY3QKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRo
SW5zcGVjdG9yT2JqZWN0Oltqc29uT2JqZWN0IHRvSW5zcGVjdG9yT2JqZWN0XS5nZXQoKV0pKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBjb2RlOihpbnQpY29kZQor
eworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QUk9QRVJUWShtZXNzYWdlLCBAIm1l
c3NhZ2UiKTsKKworICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgc2VsZi5jb2RlID0g
Y29kZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldE1lc3NhZ2U6KE5TU3Ry
aW5nICopbWVzc2FnZQoreworICAgIFtzdXBlciBzZXRTdHJpbmc6bWVzc2FnZSBmb3JLZXk6QCJt
ZXNzYWdlIl07Cit9CisKKy0gKE5TU3RyaW5nICopbWVzc2FnZQoreworICAgIHJldHVybiBbc3Vw
ZXIgc3RyaW5nRm9yS2V5OkAibWVzc2FnZSJdOworfQorCistICh2b2lkKXNldENvZGU6KGludClj
b2RlCit7CisgICAgW3N1cGVyIHNldEludGVnZXI6Y29kZSBmb3JLZXk6QCJjb2RlIl07Cit9CisK
Ky0gKGludCljb2RlCit7CisgICAgcmV0dXJuIFtzdXBlciBpbnRlZ2VyRm9yS2V5OkAiY29kZSJd
OworfQorCitAZW5kCisKKworIyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xUeXBlcy5tbQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3Nh
bWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNv
bgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JmNGRmZjVjY2MyOWQwZThjMWZhNGIy
ZGQzMjgzZTc3MTYzMmM3ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDIyICsw
LDAgQEAKLVsKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAotICAgICJ0eXBlcyI6IFsKLSAg
ICAgICAgewotICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKLSAgICAgICAgICAg
ICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9i
amVjdCBpZGVudGlmaWVyLiIKLSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6
ICJSdW50aW1lMiIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQi
OiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgotICAgICAg
ICB9Ci0gICAgXQotfQotXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NoYWRvd2VkLW9w
dGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
MGEwYzE1NTI3NTBmNjI4Mjg4Y2ZmNDE5Mzk2YmQ2ZjZhZjc0OWZlLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgor
KysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLXsKLSAgICAiZG9tYWluIjogIlJ1bnRpbWUi
LAotICAgICJ0eXBlcyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIktleVBhdGgi
LAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJLZXkgcGF0aC4iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJ0eXBlIiwKLSAgICAgICAgICAg
ICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICAgICAgICAgImVudW0iOiBb
Im51bGwiLCAic3RyaW5nIiwgImFycmF5Il0sCi0gICAgICAgICAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJLZXkgcGF0aCB0eXBlLiIKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAic3RyaW5nIiwKLSAgICAgICAgICAg
ICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICAgICAgICAgIm9wdGlvbmFs
IjogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlN0cmluZyB2YWx1
ZS4iCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICJuYW1lIjogImFycmF5IiwKLSAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiYXJy
YXkiLAotICAgICAgICAgICAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICAg
ICAgICAgICAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSwKLSAgICAgICAgICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIkFycmF5IHZhbHVlLiIKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBdCi0gICAgICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2Vk
LXByaW1pdGl2ZS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYzlkNTM5NDc4ZGI0OTVjOTYwNjdlY2Q1
NGE5NWJlNTJmOGQwNzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUt
ZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAg
LTEsMTAgKzAsMCBAQAotewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVzIjog
WwotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAotICAgICAg
ICAgICAgInR5cGUiOiAiaW50ZWdlciIsCi0gICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5p
cXVlIG9iamVjdCBpZGVudGlmaWVyLiIKLSAgICAgICAgfQotICAgIF0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xh
cmF0aW9uLWFycmF5LXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZiMDhiZDk0MGI2NGZiNjYwMzk2NWNlMWIwNGQzZmM5NzQ5
ZWE5MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlv
bi1hcnJheS10eXBlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi1bCi17Ci0g
ICAgImRvbWFpbiI6ICJEZWJ1Z2dlciIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAg
ICAgICAgICAiaWQiOiAiQnJlYWtwb2ludElkIiwKLSAgICAgICAgICAgICJ0eXBlIjogImludGVn
ZXIiCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZWFzb24iLAot
ICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJEaWVk
IiwgIkZhaW50ZWQiLCAiSHVuZ3J5Il0KLSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRv
bWFpbiI6ICJSdW50aW1lIiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICJpZCI6ICJPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgotICAgICAg
ICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiTHVja3lOdW1iZXJzIiwKLSAgICAg
ICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAi
aW50ZWdlciIgfQotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiQmFi
eU5hbWVzIiwKLSAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICJpdGVt
cyI6IHsgInR5cGUiOiAic3RyaW5nIiB9Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAg
ICAgICJpZCI6ICJOZXdPYmplY3RzIiwKLSAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAg
ICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiT2JqZWN0SWQiIH0KLSAgICAgICAgfSwKLSAg
ICAgICAgewotICAgICAgICAgICAgImlkIjogIk9sZE9iamVjdHMiLAotICAgICAgICAgICAgInR5
cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJEZWJ1Z2dlci5C
cmVha3BvaW50SWQiIH0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjog
IlN0b3BSZWFzb25zIiwKLSAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAg
ICJpdGVtcyI6IHsgIiRyZWYiOiAiRGVidWdnZXIuUmVhc29uIiB9Ci0gICAgICAgIH0KLSAgICBd
Ci19Ci1dCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlw
ZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjBhZWU5YzkxYjk1YWJhZjM4
N2U3MmE5MWEzMzM4YjU3OWRhOWFhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTUg
KzAsMCBAQAotewotICAgICJkb21haW4iOiAiUnVudGltZSIsCi0gICAgInR5cGVzIjogWwotICAg
ICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiRmFybUFuaW1hbHMiLAotICAgICAgICAgICAgInR5
cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJQaWdzIiwgIkNvd3MiLCAiQ2F0
cyIsICJIZW5zIl0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlR3
b0xlZ2dlZEFuaW1hbHMiLAotICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAg
ICAgICJlbnVtIjogWyJEdWNrcyIsICJIZW5zIiwgIkNyb3dzIiwgIkZsYW1pbmdvcyJdCi0gICAg
ICAgIH0KLSAgICBdCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc4MzA5
MTk3M2JjZjM3NTQ1Y2Q3NTk2MDkxODY3ZjhjYTI1ZDg1YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisrKyAvZGV2
L251bGwKQEAgLTEsODMgKzAsMCBAQAotWwotewotICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAot
ICAgICJkZXNjcmlwdGlvbiI6ICJUZXN0IHR5cGUgYnVpbGRlciBnZW5lcmF0aW9uIG9mIHZhcmlv
dXMgb2JqZWN0IHR5cGVzLiIsCi0gICAgInR5cGVzIjogWwotICAgICAgICB7Ci0gICAgICAgICAg
ICAiaWQiOiAiRXJyb3IiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAotICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAi
c3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAotICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAi
RXJyb3IgY29kZS4iIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAg
ICAgICAgICAgImlkIjogIkVycm9yTGlzdCIsCi0gICAgICAgICAgICAidHlwZSI6ICJhcnJheSIs
Ci0gICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIkVycm9yIiB9Ci0gICAgICAgIH0sCi0g
ICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSIsCi0g
ICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5
IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5
cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25h
bCI6IHRydWUgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yIiwgIiRyZWYiOiAi
RXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJl
cnJvckxpc3QiLCAiJHJlZiI6ICJFcnJvckxpc3QiLCAib3B0aW9uYWwiOiB0cnVlIH0KLSAgICAg
ICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlBhcmFt
ZXRlckJ1bmRsZSIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAg
InByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIs
ICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKLSAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCi0gICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJlcnJvckxpc3QiLCAiJHJlZiI6ICJFcnJvckxpc3QiIH0KLSAg
ICAgICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIk9i
amVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMiLAotICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIkNvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMg
dG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4iLAotICAgICAg
ICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiaW50ZWdlciIsICJ0eXBlIjogInN0cmluZyIgfSwKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImFycmF5IiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RyaW5nIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWUiLCAidHlwZSI6ICJzdHJpbmciIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJvYmplY3QiLCAidHlwZSI6ICJzdHJpbmciIH0KLSAgICAg
ICAgICAgIF0KLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIkR1bW15
T2JqZWN0IiwKLSAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBbiBvcGVuIG9iamVjdCB0aGF0
IGRvZXNuJ3QgaGF2ZSBhbnkgcHJlZGVmaW5lZCBmaWVsZHMuIiwKLSAgICAgICAgICAgICJ0eXBl
IjogIm9iamVjdCIKLSAgICAgICAgfQotICAgIF0KLX0sCi17Ci0gICAgImRvbWFpbiI6ICJUZXN0
IiwKLSAgICAiZGVzY3JpcHRpb24iOiAiVGVzdCB0aGUgZ2VuZXJhdGlvbiBvZiBzcGVjaWFsIGJl
aGF2aW9ycyB0aGF0IG9ubHkgYXBwbHkgdG8gc3BlY2lmaWMgY2xhc3Nlcy4iLAotICAgICJ0eXBl
cyI6IFsKLSAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlBhcmFtZXRlckJ1bmRsZSIsCi0g
ICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5
IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAotICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKLSAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImVycm9yIiwgIiRyZWYiOiAiRGF0YWJhc2UuRXJyb3IiIH0KLSAgICAgICAgICAgIF0K
LSAgICAgICAgfQotICAgIF0KLX0KLV0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1y
ZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA4M2Q5NGJlODk3ZDIyY2MwNThiYjY0NmZlY2Q5YTQ3MzAzN2I2YjkyLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24K
KysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi1bCi17Ci0gICAgImRvbWFpbiI6ICJUZXN0
IiwKLSAgICAidHlwZXMiOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJUeXBlTmVl
ZGluZ0Nhc3QiLAotICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJBIGR1bW15IHR5cGUgdGhhdCByZXF1aXJlcyBydW50aW1lIGNhc3RzLCBh
bmQgZm9yY2VzIG5vbi1wcmltaXRpdmUgcmVmZXJlbmNlZCB0eXBlcyB0byBhbHNvIGVtaXQgcnVu
dGltZSBjYXN0IGhlbHBlcnMuIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAic3RyaW5nIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0
aW9uIjogIlN0cmluZyBtZW1iZXIuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibnVt
YmVyIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgbWVtYmVyLiIg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFuaW1hbHMiLCAiJHJlZiI6ICJDYXN0ZWRB
bmltYWxzIiwgImRlc2NyaXB0aW9uIjogIkVudW0gbWVtYmVyLiIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImlkIiwgIiRyZWYiOiAiQ2FzdGVkT2JqZWN0SWQiLCAiZGVzY3JpcHRpb24i
OiAiQWxpYXNlZCBtZW1iZXIuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHJlZSIs
ICIkcmVmIjogIlJlY3Vyc2l2ZU9iamVjdDEiLCAiZGVzY3JpcHRpb24iOiAiUmVjdXJzaXZlIG9i
amVjdCBtZW1iZXIuIiB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAg
ICAgICAgICAgICJpZCI6ICJDYXN0ZWRPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJp
bnRlZ2VyIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiVW5jYXN0
ZWRPYmplY3RJZCIsCi0gICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgotICAgICAgICB9LAot
ICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiVW5jYXN0ZWRBbmltYWxzIiwKLSAgICAgICAg
ICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAiZW51bSI6IFsiUGlncyIsICJDb3dz
IiwgIkNhdHMiLCAiSGVucyJdCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICJp
ZCI6ICJDYXN0ZWRBbmltYWxzIiwKLSAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAg
ICAgICAgICAiZW51bSI6IFsiRHVja3MiLCAiSGVucyIsICJDcm93cyIsICJGbGFtaW5nb3MiXQot
ICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiaWQiOiAiUmVjdXJzaXZlT2JqZWN0
MSIsCi0gICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgInByb3BlcnRp
ZXMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmoiLCAiJHJlZiI6ICJSZWN1cnNp
dmVPYmplY3QyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9Ci0gICAgICAgICAgICBdCi0gICAgICAgIH0s
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJSZWN1cnNpdmVPYmplY3QyIiwKLSAgICAg
ICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogIm9iaiIsICIkcmVmIjogIlJlY3Vyc2l2ZU9iamVjdDEi
LCAib3B0aW9uYWwiOiB0cnVlIH0KLSAgICAgICAgICAgIF0KLSAgICAgICAgfQotICAgIF0KLX0K
LV0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBh
OGVlZWU4OTRhZThjNDMzODI4ZjgyNWZiZTI1OWY3MTc4ZDUxODFiLi40YjA2Y2UyOTkwMDBjYTNh
NjUxMTY1YTcyN2JmNzlmMjVlNTAyNjhjIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTYtMTItMjEgIEJyaWFuIEJ1
cmcgIDxiYnVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogdGVhY2ggdGhl
IHByb3RvY29sIGdlbmVyYXRvciBhYm91dCBwbGF0Zm9ybS1zcGVjaWZpYyB0eXBlcywgZXZlbnRz
LCBhbmQgY29tbWFuZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NjAwMworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjg3MTg5OTA+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVhY2ggcnVuLWluc3Bl
Y3Rvci1nZW5lcmF0b3ItdGVzdHMgdG8gZ2VuZXJhdGUgdGVzdCBvdXRwdXQgdXNpbmcgdGhlIHBs
YXRmb3JtIG5hbWUKKyAgICAgICAgZGVyaXZlZCBmcm9tIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGUg
dGVzdCBpcyBpbi4gRm9yIGV4YW1wbGUsIHRlc3RzIGluIHRoZSAvZ2VuZXJpYy8KKyAgICAgICAg
c3ViZGlyZWN0b3J5IHdpbGwgcGFzcyBgLS1wbGF0Zm9ybSBnZW5lcmljYCB0byBnZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2luc3BlY3Rvci9tYWluLnB5OgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMu
Z2VuZXJhdGVfZnJvbV9qc29uKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLnJ1
bl90ZXN0cyk6CisgICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cy5tYWluKToKKwogMjAx
Ni0xMi0yMiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAg
ICBmYXN0L2V2ZW50cy9pb3Mvdmlld3BvcnQtc2hyaW5rLXRvLWZpdC1hbGxvd3MtZG91YmxlLXRh
cC5odG1sIGlzIGZsYWt5L29yZGVyIGRlcGVuZGVudApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5z
cGVjdG9yL21haW4ucHkKaW5kZXggMjI0NGQ0Yzc4MmNhZTdkYWFhZjI2NzdjMDRlMjM2Yzc4Zjk4
ZDE0ZS4uYThmY2YyYTQxODQwNzIzNWZjYTQwMjQ0YmZmNDUyYTBhZDY0NGRjNyAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9tYWluLnB5CkBAIC0zOCwxMyArMzgsMTQgQEAgY2xh
c3MgSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHM6CiAgICAgICAgIHNlbGYucmVzZXRfcmVzdWx0cyA9
IHJlc2V0X3Jlc3VsdHMKICAgICAgICAgc2VsZi5leGVjdXRpdmUgPSBleGVjdXRpdmUKIAotICAg
IGRlZiBnZW5lcmF0ZV9mcm9tX2pzb24oc2VsZiwganNvbl9maWxlLCBvdXRwdXRfZGlyZWN0b3J5
KToKKyAgICBkZWYgZ2VuZXJhdGVfZnJvbV9qc29uKHNlbGYsIGpzb25fZmlsZSwgcGxhdGZvcm0s
IG91dHB1dF9kaXJlY3RvcnkpOgogICAgICAgICBjbWQgPSBbJ3B5dGhvbicsCiAgICAgICAgICAg
ICAgICAnSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5JywKICAgICAgICAgICAgICAgICctLW91dHB1dERpcicsIG91
dHB1dF9kaXJlY3RvcnksCiAgICAgICAgICAgICAgICAnLS1mb3JjZScsCiAgICAgICAgICAgICAg
ICAnLS1mcmFtZXdvcmsnLCAnVGVzdCcsCiAgICAgICAgICAgICAgICAnLS10ZXN0JywKKyAgICAg
ICAgICAgICAgICctLXBsYXRmb3JtJywgcGxhdGZvcm0sCiAgICAgICAgICAgICAgICBqc29uX2Zp
bGVdCiAKICAgICAgICAgZXhpdF9jb2RlID0gMApAQCAtODcsNyArODgsNyBAQCBjbGFzcyBJbnNw
ZWN0b3JHZW5lcmF0b3JUZXN0czoKICAgICAgICAgICAgICAgICBwcmludCAnUEFTUzogJXMnICUg
b3V0cHV0X2ZpbGUKICAgICAgICAgcmV0dXJuIGNoYW5nZXNfZm91bmQKIAotICAgIGRlZiBydW5f
dGVzdHMoc2VsZiwgaW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5KToKKyAgICBk
ZWYgcnVuX3Rlc3RzKHNlbGYsIHBsYXRmb3JtLCBpbnB1dF9kaXJlY3RvcnksIHJlZmVyZW5jZV9k
aXJlY3RvcnkpOgogICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHJlZmVyZW5jZV9kaXJlY3RvcnkK
IAogICAgICAgICBwYXNzZWQgPSBUcnVlCkBAIC0xMDAsNyArMTAxLDcgQEAgY2xhc3MgSW5zcGVj
dG9yR2VuZXJhdG9yVGVzdHM6CiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5yZXNldF9yZXN1bHRz
OgogICAgICAgICAgICAgICAgIHdvcmtfZGlyZWN0b3J5ID0gdGVtcGZpbGUubWtkdGVtcCgpCiAK
LSAgICAgICAgICAgIGlmIHNlbGYuZ2VuZXJhdGVfZnJvbV9qc29uKG9zLnBhdGguam9pbihpbnB1
dF9kaXJlY3RvcnksIGlucHV0X2ZpbGUpLCB3b3JrX2RpcmVjdG9yeSk6CisgICAgICAgICAgICBp
ZiBzZWxmLmdlbmVyYXRlX2Zyb21fanNvbihvcy5wYXRoLmpvaW4oaW5wdXRfZGlyZWN0b3J5LCBp
bnB1dF9maWxlKSwgcGxhdGZvcm0sIHdvcmtfZGlyZWN0b3J5KToKICAgICAgICAgICAgICAgICBw
YXNzZWQgPSBGYWxzZQogCiAgICAgICAgICAgICBpZiBzZWxmLnJlc2V0X3Jlc3VsdHM6CkBAIC0x
MjAsMTAgKzEyMSwyMiBAQCBjbGFzcyBJbnNwZWN0b3JHZW5lcmF0b3JUZXN0czoKIAogICAgICAg
ICBhbGxfdGVzdHNfcGFzc2VkID0gVHJ1ZQogCi0gICAgICAgIGlucHV0X2RpcmVjdG9yeSA9IG9z
LnBhdGguam9pbignSmF2YVNjcmlwdENvcmUnLCAnaW5zcGVjdG9yJywgJ3NjcmlwdHMnLCAndGVz
dHMnKQotICAgICAgICByZWZlcmVuY2VfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKCdKYXZhU2Ny
aXB0Q29yZScsICdpbnNwZWN0b3InLCAnc2NyaXB0cycsICd0ZXN0cycsICdleHBlY3RlZCcpCi0g
ICAgICAgIGlmIG5vdCBzZWxmLnJ1bl90ZXN0cyhpbnB1dF9kaXJlY3RvcnksIHJlZmVyZW5jZV9k
aXJlY3RvcnkpOgotICAgICAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IEZhbHNlCisgICAgICAg
IGJhc2VfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKCdKYXZhU2NyaXB0Q29yZScsICdpbnNwZWN0
b3InLCAnc2NyaXB0cycsICd0ZXN0cycpCisKKyAgICAgICAgcGxhdGZvcm1fZGlyZWN0b3JpZXMg
PSB7CisgICAgICAgICAgICAnbWFjb3MnOiAnbWFjJywKKyAgICAgICAgICAgICdpb3MnOiAnaW9z
JywKKyAgICAgICAgICAgICdnZW5lcmljJzogJ2dlbmVyaWMnLAorICAgICAgICAgICAgJ2FsbCc6
ICdhbGwnLAorICAgICAgICB9CisKKyAgICAgICAgZm9yIHBsYXRmb3JtX25hbWUsIHBsYXRmb3Jt
X2RpcmVjdG9yeSBpbiBwbGF0Zm9ybV9kaXJlY3Rvcmllcy5pdGVyaXRlbXMoKToKKyAgICAgICAg
ICAgIGlucHV0X2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbihiYXNlX2RpcmVjdG9yeSwgcGxhdGZv
cm1fZGlyZWN0b3J5KQorICAgICAgICAgICAgcmVmZXJlbmNlX2RpcmVjdG9yeSA9IG9zLnBhdGgu
am9pbihpbnB1dF9kaXJlY3RvcnksICdleHBlY3RlZCcpCisgICAgICAgICAgICBpZiBub3Qgb3Mu
cGF0aC5pc2RpcihpbnB1dF9kaXJlY3RvcnkpIG9yIG5vdCBvcy5wYXRoLmlzZGlyKGlucHV0X2Rp
cmVjdG9yeSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgYWxsX3Rl
c3RzX3Bhc3NlZCA9IGFsbF90ZXN0c19wYXNzZWQgYW5kIHNlbGYucnVuX3Rlc3RzKHBsYXRmb3Jt
X25hbWUsIGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSkKIAogICAgICAgICBw
cmludCAnJwogICAgICAgICBpZiBhbGxfdGVzdHNfcGFzc2VkOgo=
</data>
<flag name="review"
          id="319975"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>